Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/Debug/Makefile
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/Debug/Makefile	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/Debug/Makefile	(revision 374)
@@ -153,4 +153,10 @@
 
 #
+#  mbedサービスの定義
+#
+
+include $(SRCDIR)/mbed/Makefile.mbed
+
+#
 #  共通コンパイルオプションの定義
 #
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/DebugCitrus/Makefile
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/DebugCitrus/Makefile	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/DebugCitrus/Makefile	(revision 374)
@@ -153,4 +153,10 @@
 
 #
+#  mbedサービスの定義
+#
+
+include $(SRCDIR)/mbed/Makefile.mbed
+
+#
 #  共通コンパイルオプションの定義
 #
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/arch/rx630_gcc/tSCIF.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/arch/rx630_gcc/tSCIF.c	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/arch/rx630_gcc/tSCIF.c	(revision 374)
@@ -47,4 +47,5 @@
 #include "tSCIF_tecsgen.h"
 #include "scif.h"
+#include "target_kernel_impl.h"
 
 /*
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/cfg/pass1.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/cfg/pass1.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/cfg/pass1.rb	(revision 374)
@@ -727,5 +727,5 @@
   #
   def self.OutLineNumber(cfgInfo)
-    @cfg1Out.add("#line #{cfgInfo[:_LINE_]} \"#{cfgInfo[:_FILE_]}\"")
+    @cfg1Out.add("#line #{cfgInfo[:_LINE_]} \"#{cfgInfo[:_FILE_].gsub('\\', '/')}\"")
   end
 
@@ -734,5 +734,5 @@
   #
   def self.OutClassLineNumber(cfgInfo)
-    @cfg1Out.add("#line #{cfgInfo[:CLASS_LINE_]} \"#{cfgInfo[:CLASS_FILE_]}\"")
+    @cfg1Out.add("#line #{cfgInfo[:CLASS_LINE_]} \"#{cfgInfo[:CLASS_FILE_].gsub('\\', '/')}\"")
   end
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/gdic/adafruit_ssd1306/adafruit_ssd1306.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/gdic/adafruit_ssd1306/adafruit_ssd1306.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/gdic/adafruit_ssd1306/adafruit_ssd1306.h	(revision 374)
@@ -22,5 +22,7 @@
 #include <stdbool.h>
 #include <time.h>
-#include "mbed_api.h"
+#include "gpio_api.h"
+#include "spi_api.h"
+#include "i2c_api.h"
 #include "gfxfont.h"
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/Makefile.mbed
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/Makefile.mbed	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/Makefile.mbed	(revision 374)
@@ -0,0 +1,36 @@
+#
+#		Makefile のmbed（RZ/A1用）
+#
+#  $Id$
+# 
+
+#
+#  mbedディレクトリ名の定義
+#
+MBEDDIR = $(SRCDIR)/mbed
+
+#
+#  コンパイルオプション
+#
+INCLUDES := $(INCLUDES)\
+	-I$(MBEDDIR)\
+	-I$(MBEDDIR)/hal\
+	-I$(MBEDDIR)/platform\
+	-I$(MBEDDIR)/target
+COPTS := $(COPTS)
+LDFLAGS := $(LDFLAGS)
+CDEFS := $(CDEFS)
+
+#
+#  システムサービスに関する定義
+#
+SYSSVC_DIRS := $(SYSSVC_DIRS)\
+	$(MBEDDIR)/hal\
+	$(MBEDDIR)/target
+SYSSVC_ASMOBJS := $(SYSSVC_ASMOBJS)
+#START_OBJS = 
+SYSSVC_COBJS := $(SYSSVC_COBJS)\
+	mbed_api.o mbed_lp_ticker_api.o mbed_gpio.o mbed_pinmap_common.o\
+	mbed_us_ticker_api.o mbed_ticker_api.o
+#CFG_DMY := 
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/analogin_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/analogin_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/analogin_api.h	(revision 374)
@@ -0,0 +1,71 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_ANALOGIN_API_H
+#define MBED_ANALOGIN_API_H
+
+#include "device.h"
+
+#if DEVICE_ANALOGIN
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Analogin hal structure. analogin_s is declared in the target's hal
+ */
+typedef struct analogin_s analogin_t;
+
+/**
+ * \defgroup hal_analogin Analogin hal functions
+ * @{
+ */
+
+/** Initialize the analogin peripheral
+ *
+ * Configures the pin used by analogin.
+ * @param obj The analogin object to initialize
+ * @param pin The analogin pin name
+ */
+void analogin_init(analogin_t *obj, PinName pin);
+
+/** Read the input voltage, represented as a float in the range [0.0, 1.0]
+ *
+ * @param obj The analogin object
+ * @return A floating value representing the current input voltage
+ */
+float analogin_read(analogin_t *obj);
+
+/** Read the value from analogin pin, represented as an unsigned 16bit value
+ *
+ * @param obj The analogin object
+ * @return An unsigned 16bit value representing the current input voltage
+ */
+uint16_t analogin_read_u16(analogin_t *obj);
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/analogout_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/analogout_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/analogout_api.h	(revision 374)
@@ -0,0 +1,93 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_ANALOGOUT_API_H
+#define MBED_ANALOGOUT_API_H
+
+#include "device.h"
+
+#if DEVICE_ANALOGOUT
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Analogout hal structure. dac_s is declared in the target's hal
+ */
+typedef struct dac_s dac_t;
+
+/**
+ * \defgroup hal_analogout Analogout hal functions
+ * @{
+ */
+
+/** Initialize the analogout peripheral
+ *
+ * Configures the pin used by analogout.
+ * @param obj The analogout object to initialize
+ * @param pin The analogout pin name
+ */
+void analogout_init(dac_t *obj, PinName pin);
+
+/** Release the analogout object
+ *
+ * Note: This is not currently used in the mbed-drivers
+ * @param obj The analogout object
+ */
+void analogout_free(dac_t *obj);
+
+/** Set the output voltage, specified as a percentage (float)
+ *
+ * @param obj The analogin object
+ * @param value The floating-point output voltage to be set
+ */
+void analogout_write(dac_t *obj, float value);
+
+/** Set the output voltage, specified as unsigned 16-bit
+ *
+ * @param obj The analogin object
+ * @param value The unsigned 16-bit output voltage to be set
+ */
+void analogout_write_u16(dac_t *obj, uint16_t value);
+
+/** Read the current voltage value on the pin
+ *
+ * @param obj The analogin object
+ * @return A floating-point value representing the current voltage on the pin,
+ *     measured as a percentage
+ */
+float analogout_read(dac_t *obj);
+
+/** Read the current voltage value on the pin, as a normalized unsigned 16bit value
+ *
+ * @param obj The analogin object
+ * @return An unsigned 16-bit value representing the current voltage on the pin
+ */
+uint16_t analogout_read_u16(dac_t *obj);
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/buffer.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/buffer.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/buffer.h	(revision 374)
@@ -0,0 +1,35 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2014-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_BUFFER_H
+#define MBED_BUFFER_H
+
+#include <stddef.h>
+
+/** Generic buffer structure
+ */
+typedef struct buffer_s {
+    void    *buffer; /**< the pointer to a buffer */
+    size_t   length; /**< the buffer length */
+    size_t   pos;    /**< actual buffer position */
+    uint8_t  width;  /**< The buffer unit width (8, 16, 32, 64), used for proper *buffer casting */
+} buffer_t;
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/can_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/can_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/can_api.h	(revision 374)
@@ -0,0 +1,85 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2016 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_CAN_API_H
+#define MBED_CAN_API_H
+
+#include "device.h"
+
+#if DEVICE_CAN
+
+#include "PinNames.h"
+#include "PeripheralNames.h"
+#include "hal/can_helper.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+    IRQ_RX,
+    IRQ_TX,
+    IRQ_ERROR,
+    IRQ_OVERRUN,
+    IRQ_WAKEUP,
+    IRQ_PASSIVE,
+    IRQ_ARB,
+    IRQ_BUS,
+    IRQ_READY
+} CanIrqType;
+
+
+typedef enum {
+    MODE_RESET,
+    MODE_NORMAL,
+    MODE_SILENT,
+    MODE_TEST_LOCAL,
+    MODE_TEST_GLOBAL,
+    MODE_TEST_SILENT
+} CanMode;
+
+typedef void (*can_irq_handler)(uint32_t id, CanIrqType type);
+
+typedef struct can_s can_t;
+
+void          can_init     (can_t *obj, PinName rd, PinName td);
+void          can_free     (can_t *obj);
+int           can_frequency(can_t *obj, int hz);
+
+void          can_irq_init (can_t *obj, can_irq_handler handler, uint32_t id);
+void          can_irq_free (can_t *obj);
+void          can_irq_set  (can_t *obj, CanIrqType irq, uint32_t enable);
+
+int           can_write    (can_t *obj, CAN_Message, int cc);
+int           can_read     (can_t *obj, CAN_Message *msg, int handle);
+int           can_mode     (can_t *obj, CanMode mode);
+int           can_filter(can_t *obj, uint32_t id, uint32_t mask, CANFormat format, int32_t handle);
+void          can_reset    (can_t *obj);
+unsigned char can_rderror  (can_t *obj);
+unsigned char can_tderror  (can_t *obj);
+void          can_monitor  (can_t *obj, int silent);
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif    // MBED_CAN_API_H
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/can_helper.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/can_helper.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/can_helper.h	(revision 374)
@@ -0,0 +1,58 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_CAN_HELPER_H
+#define MBED_CAN_HELPER_H
+
+#if DEVICE_CAN
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum CANFormat {
+    CANStandard = 0,
+    CANExtended = 1,
+    CANAny = 2
+};
+typedef enum CANFormat CANFormat;
+
+enum CANType {
+    CANData   = 0,
+    CANRemote = 1
+};
+typedef enum CANType CANType;
+
+struct CAN_Message {
+    unsigned int   id;                 // 29 bit identifier
+    unsigned char  data[8];            // Data field
+    unsigned char  len;                // Length of data field in bytes
+    CANFormat      format;             // 0 - STANDARD, 1- EXTENDED IDENTIFIER
+    CANType        type;               // 0 - DATA FRAME, 1 - REMOTE FRAME
+};
+typedef struct CAN_Message CAN_Message;
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif
+
+#endif // MBED_CAN_HELPER_H
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/dma_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/dma_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/dma_api.h	(revision 374)
@@ -0,0 +1,50 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2014-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_DMA_API_H
+#define MBED_DMA_API_H
+
+#include <stdint.h>
+
+#define DMA_ERROR_OUT_OF_CHANNELS (-1)
+
+typedef enum {
+    DMA_USAGE_NEVER,
+    DMA_USAGE_OPPORTUNISTIC,
+    DMA_USAGE_ALWAYS,
+    DMA_USAGE_TEMPORARY_ALLOCATED,
+    DMA_USAGE_ALLOCATED
+} DMAUsage;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void dma_init(void);
+
+int dma_channel_allocate(uint32_t capabilities);
+
+int dma_channel_free(int channelid);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/ethernet_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/ethernet_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/ethernet_api.h	(revision 374)
@@ -0,0 +1,72 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_ETHERNET_API_H
+#define MBED_ETHERNET_API_H
+
+#include "device.h"
+
+#if DEVICE_ETHERNET
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Descriptor info */
+#define NUM_OF_TX_DESCRIPTOR    (4)
+#define NUM_OF_RX_DESCRIPTOR    (4)
+
+// Connection constants
+
+int ethernet_init(void);
+void ethernet_free(void);
+
+// write size bytes from data to ethernet buffer
+// return num bytes written
+// or -1 if size is too big
+int ethernet_write(const char *data, int size);
+
+// send ethernet write buffer, returning the packet size sent
+int ethernet_send(void);
+
+// recieve from ethernet buffer, returning packet size, or 0 if no packet
+int ethernet_receive(void);
+
+// read size bytes in to data, return actual num bytes read (0..size)
+// if data == NULL, throw the bytes away
+int ethernet_read(char *data, int size);
+
+// get the ethernet address
+void ethernet_address(char *mac);
+
+// see if the link is up
+int ethernet_link(void);
+
+// force link settings
+void ethernet_set_link(int speed, int duplex);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
+
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/gpio_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/gpio_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/gpio_api.h	(revision 374)
@@ -0,0 +1,133 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_GPIO_API_H
+#define MBED_GPIO_API_H
+
+#include <stdint.h>
+#include "device.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup hal_gpio GPIO HAL functions
+ * @{
+ */
+
+/** Set the given pin as GPIO
+ *
+ * @param pin The pin to be set as GPIO
+ * @return The GPIO port mask for this pin
+ **/
+uint32_t gpio_set(PinName pin);
+/* Checks if gpio object is connected (pin was not initialized with NC)
+ * @param pin The pin to be set as GPIO
+ * @return 0 if port is initialized with NC
+ **/
+int gpio_is_connected(const gpio_t *obj);
+
+/** Initialize the GPIO pin
+ *
+ * @param obj The GPIO object to initialize
+ * @param pin The GPIO pin to initialize
+ */
+void gpio_init(gpio_t *obj, PinName pin);
+
+/** Set the input pin mode
+ *
+ * @param obj  The GPIO object
+ * @param mode The pin mode to be set
+ */
+void gpio_mode(gpio_t *obj, PinMode mode);
+
+/** Set the pin direction
+ *
+ * @param obj       The GPIO object
+ * @param direction The pin direction to be set
+ */
+void gpio_dir(gpio_t *obj, PinDirection direction);
+
+/** Set the output value
+ *
+ * @param obj   The GPIO object
+ * @param value The value to be set
+ */
+void gpio_write(gpio_t *obj, int value);
+
+/** Read the input value
+ *
+ * @param obj The GPIO object
+ * @return An integer value 1 or 0
+ */
+int gpio_read(gpio_t *obj);
+
+// the following functions are generic and implemented in the common gpio.c file
+// TODO: fix, will be moved to the common gpio header file
+
+/** Init the input pin and set mode to PullDefault
+ *
+ * @param obj The GPIO object
+ * @param pin The pin name
+ */
+void gpio_init_in(gpio_t* gpio, PinName pin);
+
+/** Init the input pin and set the mode
+ *
+ * @param obj  The GPIO object
+ * @param pin  The pin name
+ * @param mode The pin mode to be set
+ */
+void gpio_init_in_ex(gpio_t* gpio, PinName pin, PinMode mode);
+
+/** Init the output pin as an output, with predefined output value 0
+ *
+ * @param obj The GPIO object
+ * @param pin The pin name
+ * @return An integer value 1 or 0
+ */
+void gpio_init_out(gpio_t* gpio, PinName pin);
+
+/** Init the pin as an output and set the output value
+ *
+ * @param obj   The GPIO object
+ * @param pin   The pin name
+ * @param value The value to be set
+ */
+void gpio_init_out_ex(gpio_t* gpio, PinName pin, int value);
+
+/** Init the pin to be in/out
+ *
+ * @param obj       The GPIO object
+ * @param pin       The pin name
+ * @param direction The pin direction to be set
+ * @param mode      The pin mode to be set
+ * @param value     The value to be set for an output pin
+ */
+void gpio_init_inout(gpio_t* gpio, PinName pin, PinDirection direction, PinMode mode, int value);
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/gpio_irq_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/gpio_irq_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/gpio_irq_api.h	(revision 374)
@@ -0,0 +1,97 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_GPIO_IRQ_API_H
+#define MBED_GPIO_IRQ_API_H
+
+#include "device.h"
+
+#if DEVICE_INTERRUPTIN
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** GPIO IRQ events
+ */
+typedef enum {
+    IRQ_NONE,
+    IRQ_RISE,
+    IRQ_FALL
+} gpio_irq_event;
+
+/** GPIO IRQ HAL structure. gpio_irq_s is declared in the target's HAL
+ */
+typedef struct gpio_irq_s gpio_irq_t;
+
+typedef void (*gpio_irq_handler)(uint32_t id, gpio_irq_event event);
+
+/**
+ * \defgroup hal_gpioirq GPIO IRQ HAL functions
+ * @{
+ */
+
+/** Initialize the GPIO IRQ pin
+ *
+ * @param obj     The GPIO object to initialize
+ * @param pin     The GPIO pin name
+ * @param handler The handler to be attached to GPIO IRQ
+ * @param id      The object ID (id != 0, 0 is reserved)
+ * @return -1 if pin is NC, 0 otherwise
+ */
+int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id);
+
+/** Release the GPIO IRQ PIN
+ *
+ * @param obj The gpio object
+ */
+void gpio_irq_free(gpio_irq_t *obj);
+
+/** Enable/disable pin IRQ event
+ *
+ * @param obj    The GPIO object
+ * @param event  The GPIO IRQ event
+ * @param enable The enable flag
+ */
+void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable);
+
+/** Enable GPIO IRQ
+ *
+ * This is target dependent, as it might enable the entire port or just a pin
+ * @param obj The GPIO object
+ */
+void gpio_irq_enable(gpio_irq_t *obj);
+
+/** Disable GPIO IRQ
+ *
+ * This is target dependent, as it might disable the entire port or just a pin
+ * @param obj The GPIO object
+ */
+void gpio_irq_disable(gpio_irq_t *obj);
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/i2c_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/i2c_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/i2c_api.h	(revision 374)
@@ -0,0 +1,248 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_I2C_API_H
+#define MBED_I2C_API_H
+
+#include "device.h"
+#include "hal/buffer.h"
+
+#if DEVICE_I2C_ASYNCH
+#include "hal/dma_api.h"
+#endif
+
+#if DEVICE_I2C
+
+/**
+ * @defgroup hal_I2CEvents I2C Events Macros
+ *
+ * @{
+ */
+#define I2C_EVENT_ERROR               (1 << 1)
+#define I2C_EVENT_ERROR_NO_SLAVE      (1 << 2)
+#define I2C_EVENT_TRANSFER_COMPLETE   (1 << 3)
+#define I2C_EVENT_TRANSFER_EARLY_NACK (1 << 4)
+#define I2C_EVENT_ALL                 (I2C_EVENT_ERROR |  I2C_EVENT_TRANSFER_COMPLETE | I2C_EVENT_ERROR_NO_SLAVE | I2C_EVENT_TRANSFER_EARLY_NACK)
+
+/**@}*/
+
+#if DEVICE_I2C_ASYNCH
+/** Asynch I2C HAL structure
+ */
+typedef struct {
+    struct i2c_s    i2c;     /**< Target specific I2C structure */
+    struct buffer_s tx_buff; /**< Tx buffer */
+    struct buffer_s rx_buff; /**< Rx buffer */
+} i2c_t;
+
+#else
+/** Non-asynch I2C HAL structure
+ */
+typedef struct i2c_s i2c_t;
+
+#endif
+
+enum {
+  I2C_ERROR_NO_SLAVE = -1,
+  I2C_ERROR_BUS_BUSY = -2
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup hal_GeneralI2C I2C Configuration Functions
+ * @{
+ */
+
+/** Initialize the I2C peripheral. It sets the default parameters for I2C
+ *  peripheral, and configures its specifieds pins.
+ *  
+ *  @param obj  The I2C object
+ *  @param sda  The sda pin
+ *  @param scl  The scl pin
+ */
+void i2c_init(i2c_t *obj, PinName sda, PinName scl);
+
+/** Configure the I2C frequency
+ *
+ *  @param obj The I2C object
+ *  @param hz  Frequency in Hz
+ */
+void i2c_frequency(i2c_t *obj, int hz);
+
+/** Send START command
+ *
+ *  @param obj The I2C object
+ */
+int  i2c_start(i2c_t *obj);
+
+/** Send STOP command
+ *
+ *  @param obj The I2C object
+ */
+int  i2c_stop(i2c_t *obj);
+
+/** Blocking reading data
+ *
+ *  @param obj     The I2C object
+ *  @param address 7-bit address (last bit is 1)
+ *  @param data    The buffer for receiving
+ *  @param length  Number of bytes to read
+ *  @param stop    Stop to be generated after the transfer is done
+ *  @return Number of read bytes
+ */
+int i2c_read(i2c_t *obj, int address, char *data, int length, int stop);
+
+/** Blocking sending data
+ *
+ *  @param obj     The I2C object
+ *  @param address 7-bit address (last bit is 0)
+ *  @param data    The buffer for sending
+ *  @param length  Number of bytes to write
+ *  @param stop    Stop to be generated after the transfer is done
+ *  @return 
+ *      zero or non-zero - Number of written bytes
+ *      negative - I2C_ERROR_XXX status
+ */
+int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop);
+
+/** Reset I2C peripheral. TODO: The action here. Most of the implementation sends stop()
+ *
+ *  @param obj The I2C object
+ */
+void i2c_reset(i2c_t *obj);
+
+/** Read one byte
+ *
+ *  @param obj The I2C object
+ *  @param last Acknoledge
+ *  @return The read byte
+ */
+int i2c_byte_read(i2c_t *obj, int last);
+
+/** Write one byte
+ *
+ *  @param obj The I2C object
+ *  @param data Byte to be written
+ *  @return 0 if NAK was received, 1 if ACK was received, 2 for timeout.
+ */
+int i2c_byte_write(i2c_t *obj, int data);
+
+/**@}*/
+
+#if DEVICE_I2CSLAVE
+
+/**
+ * \defgroup SynchI2C Synchronous I2C Hardware Abstraction Layer for slave
+ * @{
+ */
+
+/** Configure I2C as slave or master.
+ *  @param obj The I2C object
+ *  @return non-zero if a value is available
+ */
+void i2c_slave_mode(i2c_t *obj, int enable_slave);
+
+/** Check to see if the I2C slave has been addressed.
+ *  @param obj The I2C object
+ *  @return The status - 1 - read addresses, 2 - write to all slaves,
+ *         3 write addressed, 0 - the slave has not been addressed
+ */
+int  i2c_slave_receive(i2c_t *obj);
+
+/** Configure I2C as slave or master.
+ *  @param obj The I2C object
+ *  @return non-zero if a value is available
+ */
+int  i2c_slave_read(i2c_t *obj, char *data, int length);
+
+/** Configure I2C as slave or master.
+ *  @param obj The I2C object
+ *  @return non-zero if a value is available
+ */
+int  i2c_slave_write(i2c_t *obj, const char *data, int length);
+
+/** Configure I2C address.
+ *  @param obj     The I2C object
+ *  @param idx     Currently not used
+ *  @param address The address to be set
+ *  @param mask    Currently not used
+ */
+void i2c_slave_address(i2c_t *obj, int idx, uint32_t address, uint32_t mask);
+
+#endif
+
+/**@}*/
+
+#if DEVICE_I2C_ASYNCH
+
+/**
+ * \defgroup hal_AsynchI2C Asynchronous I2C Hardware Abstraction Layer
+ * @{
+ */
+
+/** Start I2C asynchronous transfer
+ *
+ *  @param obj       The I2C object
+ *  @param tx        The transmit buffer
+ *  @param tx_length The number of bytes to transmit
+ *  @param rx        The receive buffer
+ *  @param rx_length The number of bytes to receive
+ *  @param address   The address to be set - 7bit or 9bit
+ *  @param stop      If true, stop will be generated after the transfer is done
+ *  @param handler   The I2C IRQ handler to be set
+ *  @param hint      DMA hint usage
+ */
+void i2c_transfer_asynch(i2c_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint32_t address, uint32_t stop, uint32_t handler, uint32_t event, DMAUsage hint);
+
+/** The asynchronous IRQ handler
+ *
+ *  @param obj The I2C object which holds the transfer information
+ *  @return Event flags if a transfer termination condition was met, otherwise return 0.
+ */
+uint32_t i2c_irq_handler_asynch(i2c_t *obj);
+
+/** Attempts to determine if the I2C peripheral is already in use
+ *
+ *  @param obj The I2C object
+ *  @return Non-zero if the I2C module is active or zero if it is not
+ */
+uint8_t i2c_active(i2c_t *obj);
+
+/** Abort asynchronous transfer
+ *
+ *  This function does not perform any check - that should happen in upper layers.
+ *  @param obj The I2C object
+ */
+void i2c_abort_asynch(i2c_t *obj);
+
+#endif
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/lp_ticker_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/lp_ticker_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/lp_ticker_api.h	(revision 374)
@@ -0,0 +1,87 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_LPTICKER_API_H
+#define MBED_LPTICKER_API_H
+
+#include "device.h"
+
+#if DEVICE_LOWPOWERTIMER
+
+#include "hal/ticker_api.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup hal_LpTicker Low Power Ticker Functions
+ * @{
+ */
+
+/** Get low power ticker's data
+ *
+ * @return The low power ticker data
+ */
+const ticker_data_t* get_lp_ticker_data(void);
+
+/** The wrapper for ticker_irq_handler, to pass lp ticker's data
+ *
+ */
+void lp_ticker_irq_handler(void);
+
+/* HAL lp ticker */
+
+/** Initialize the low power ticker
+ *
+ */
+void lp_ticker_init(void);
+
+/** Read the current counter
+ *
+ * @return The current timer's counter value in microseconds
+ */
+uint32_t lp_ticker_read(void);
+
+/** Set interrupt for specified timestamp
+ *
+ * @param timestamp The time in microseconds to be set
+ */
+void lp_ticker_set_interrupt(timestamp_t timestamp);
+
+/** Disable low power ticker interrupt
+ *
+ */
+void lp_ticker_disable_interrupt(void);
+
+/** Clear the low power ticker interrupt
+ *
+ */
+void lp_ticker_clear_interrupt(void);
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_gpio.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_gpio.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_gpio.c	(revision 374)
@@ -0,0 +1,61 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "hal/gpio_api.h"
+
+static inline void _gpio_init_in(gpio_t* gpio, PinName pin, PinMode mode)
+{
+    gpio_init(gpio, pin);
+    if (pin != NC) {
+        gpio_dir(gpio, PIN_INPUT);
+        gpio_mode(gpio, mode);
+    }
+}
+
+static inline void _gpio_init_out(gpio_t* gpio, PinName pin, PinMode mode, int value)
+{
+    gpio_init(gpio, pin);
+    if (pin != NC) {
+        gpio_write(gpio, value);
+        gpio_dir(gpio, PIN_OUTPUT);
+        gpio_mode(gpio, mode);
+    }
+}
+
+void gpio_init_in(gpio_t* gpio, PinName pin) {
+    gpio_init_in_ex(gpio, pin, PullDefault);
+}
+
+void gpio_init_in_ex(gpio_t* gpio, PinName pin, PinMode mode) {
+    _gpio_init_in(gpio, pin, mode);
+}
+
+void gpio_init_out(gpio_t* gpio, PinName pin) {
+    gpio_init_out_ex(gpio, pin, 0);
+}
+
+void gpio_init_out_ex(gpio_t* gpio, PinName pin, int value) {
+    _gpio_init_out(gpio, pin, PullNone, value);
+}
+
+void gpio_init_inout(gpio_t* gpio, PinName pin, PinDirection direction, PinMode mode, int value) {
+    if (direction == PIN_INPUT) {
+        _gpio_init_in(gpio, pin, mode);
+        if (pin != NC)
+            gpio_write(gpio, value); // we prepare the value in case it is switched later
+    } else {
+        _gpio_init_out(gpio, pin, mode, value);
+    }
+}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_lp_ticker_api.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_lp_ticker_api.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_lp_ticker_api.c	(revision 374)
@@ -0,0 +1,45 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "hal/lp_ticker_api.h"
+
+#if DEVICE_LOWPOWERTIMER
+
+static ticker_event_queue_t events;
+
+static const ticker_interface_t lp_interface = {
+    .init = lp_ticker_init,
+    .read = lp_ticker_read,
+    .disable_interrupt = lp_ticker_disable_interrupt,
+    .clear_interrupt = lp_ticker_clear_interrupt,
+    .set_interrupt = lp_ticker_set_interrupt,
+};
+
+static const ticker_data_t lp_data = {
+    .interface = &lp_interface,
+    .queue = &events,
+};
+
+const ticker_data_t* get_lp_ticker_data(void)
+{
+    return &lp_data;
+}
+
+void lp_ticker_irq_handler(void)
+{
+    ticker_irq_handler(&lp_data);
+}
+
+#endif
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_pinmap_common.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_pinmap_common.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_pinmap_common.c	(revision 374)
@@ -0,0 +1,89 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "hal/pinmap.h"
+#include "platform/mbed_error.h"
+
+void pinmap_pinout(PinName pin, const PinMap *map) {
+    if (pin == NC)
+        return;
+
+    while (map->pin != NC) {
+        if (map->pin == pin) {
+            pin_function(pin, map->function);
+
+            pin_mode(pin, PullNone);
+            return;
+        }
+        map++;
+    }
+    error("could not pinout");
+}
+
+uint32_t pinmap_merge(uint32_t a, uint32_t b) {
+    // both are the same (inc both NC)
+    if (a == b)
+        return a;
+
+    // one (or both) is not connected
+    if (a == (uint32_t)NC)
+        return b;
+    if (b == (uint32_t)NC)
+        return a;
+
+    // mis-match error case
+    error("pinmap mis-match");
+    return (uint32_t)NC;
+}
+
+uint32_t pinmap_find_peripheral(PinName pin, const PinMap* map) {
+    while (map->pin != NC) {
+        if (map->pin == pin)
+            return map->peripheral;
+        map++;
+    }
+    return (uint32_t)NC;
+}
+
+uint32_t pinmap_peripheral(PinName pin, const PinMap* map) {
+    uint32_t peripheral = (uint32_t)NC;
+
+    if (pin == (PinName)NC)
+        return (uint32_t)NC;
+    peripheral = pinmap_find_peripheral(pin, map);
+    if ((uint32_t)NC == peripheral) // no mapping available
+        error("pinmap not found for peripheral");
+    return peripheral;
+}
+
+uint32_t pinmap_find_function(PinName pin, const PinMap* map) {
+    while (map->pin != NC) {
+        if (map->pin == pin)
+            return map->function;
+        map++;
+    }
+    return (uint32_t)NC;
+}
+
+uint32_t pinmap_function(PinName pin, const PinMap* map) {
+    uint32_t function = (uint32_t)NC;
+
+    if (pin == (PinName)NC)
+        return (uint32_t)NC;
+    function = pinmap_find_function(pin, map);
+    if ((uint32_t)NC == function) // no mapping available
+        error("pinmap not found for function");
+    return function;
+}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_ticker_api.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_ticker_api.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_ticker_api.c	(revision 374)
@@ -0,0 +1,137 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <stddef.h>
+#include "hal/ticker_api.h"
+#include "platform/mbed_critical.h"
+
+void ticker_set_handler(const ticker_data_t *const data, ticker_event_handler handler) {
+    data->interface->init();
+
+    data->queue->event_handler = handler;
+}
+
+void ticker_irq_handler(const ticker_data_t *const data) {
+    data->interface->clear_interrupt();
+
+    /* Go through all the pending TimerEvents */
+    while (1) {
+        if (data->queue->head == NULL) {
+            // There are no more TimerEvents left, so disable matches.
+            data->interface->disable_interrupt();
+            return;
+        }
+
+        if ((int)(data->queue->head->timestamp - data->interface->read()) <= 0) {
+            // This event was in the past:
+            //      point to the following one and execute its handler
+            ticker_event_t *p = data->queue->head;
+            data->queue->head = data->queue->head->next;
+            if (data->queue->event_handler != NULL) {
+                (*data->queue->event_handler)(p->id); // NOTE: the handler can set new events
+            }
+            /* Note: We continue back to examining the head because calling the
+             * event handler may have altered the chain of pending events. */
+        } else {
+            // This event and the following ones in the list are in the future:
+            //      set it as next interrupt and return
+            data->interface->set_interrupt(data->queue->head->timestamp);
+            return;
+        }
+    }
+}
+
+void ticker_insert_event(const ticker_data_t *const data, ticker_event_t *obj, timestamp_t timestamp, uint32_t id) {
+    /* disable interrupts for the duration of the function */
+    core_util_critical_section_enter();
+
+    // initialise our data
+    obj->timestamp = timestamp;
+    obj->id = id;
+
+    /* Go through the list until we either reach the end, or find
+       an element this should come before (which is possibly the
+       head). */
+    ticker_event_t *prev = NULL, *p = data->queue->head;
+    while (p != NULL) {
+        /* check if we come before p */
+        if ((int)(timestamp - p->timestamp) < 0) {
+            break;
+        }
+        /* go to the next element */
+        prev = p;
+        p = p->next;
+    }
+    
+    /* if we're at the end p will be NULL, which is correct */
+    obj->next = p;
+
+    /* if prev is NULL we're at the head */
+    if (prev == NULL) {
+        data->queue->head = obj;
+        data->interface->set_interrupt(timestamp);
+    } else {
+        prev->next = obj;
+    }
+
+    core_util_critical_section_exit();
+}
+
+void ticker_remove_event(const ticker_data_t *const data, ticker_event_t *obj) {
+    core_util_critical_section_enter();
+
+    // remove this object from the list
+    if (data->queue->head == obj) {
+        // first in the list, so just drop me
+        data->queue->head = obj->next;
+        if (data->queue->head == NULL) {
+            data->interface->disable_interrupt();
+        } else {
+            data->interface->set_interrupt(data->queue->head->timestamp);
+        }
+    } else {
+        // find the object before me, then drop me
+        ticker_event_t* p = data->queue->head;
+        while (p != NULL) {
+            if (p->next == obj) {
+                p->next = obj->next;
+                break;
+            }
+            p = p->next;
+        }
+    }
+
+    core_util_critical_section_exit();
+}
+
+timestamp_t ticker_read(const ticker_data_t *const data)
+{
+    return data->interface->read();
+}
+
+int ticker_get_next_timestamp(const ticker_data_t *const data, timestamp_t *timestamp)
+{
+    int ret = 0;
+
+    /* if head is NULL, there are no pending events */
+    core_util_critical_section_enter();
+    if (data->queue->head != NULL) {
+        *timestamp = data->queue->head->timestamp;
+        ret = 1;
+    }
+    core_util_critical_section_exit();
+
+    return ret;
+}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_us_ticker_api.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_us_ticker_api.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/mbed_us_ticker_api.c	(revision 374)
@@ -0,0 +1,41 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "hal/us_ticker_api.h"
+
+static ticker_event_queue_t events;
+
+static const ticker_interface_t us_interface = {
+    .init = us_ticker_init,
+    .read = us_ticker_read,
+    .disable_interrupt = us_ticker_disable_interrupt,
+    .clear_interrupt = us_ticker_clear_interrupt,
+    .set_interrupt = us_ticker_set_interrupt,
+};
+
+static const ticker_data_t us_data = {
+    .interface = &us_interface,
+    .queue = &events,
+};
+
+const ticker_data_t* get_us_ticker_data(void)
+{
+    return &us_data;
+}
+
+void us_ticker_irq_handler(void)
+{
+    ticker_irq_handler(&us_data);
+}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/pinmap.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/pinmap.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/pinmap.h	(revision 374)
@@ -0,0 +1,50 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_PINMAP_H
+#define MBED_PINMAP_H
+
+#include "PinNames.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+    PinName pin;
+    int peripheral;
+    int function;
+} PinMap;
+
+void pin_function(PinName pin, int function);
+void pin_mode    (PinName pin, PinMode mode);
+
+uint32_t pinmap_peripheral(PinName pin, const PinMap* map);
+uint32_t pinmap_function(PinName pin, const PinMap* map);
+uint32_t pinmap_merge     (uint32_t a, uint32_t b);
+void     pinmap_pinout    (PinName pin, const PinMap *map);
+uint32_t pinmap_find_peripheral(PinName pin, const PinMap* map);
+uint32_t pinmap_find_function(PinName pin, const PinMap* map);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/port_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/port_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/port_api.h	(revision 374)
@@ -0,0 +1,93 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_PORTMAP_H
+#define MBED_PORTMAP_H
+
+#include "device.h"
+
+#if DEVICE_PORTIN || DEVICE_PORTOUT
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Port HAL structure. port_s is declared in the target's HAL
+ */
+typedef struct port_s port_t;
+
+/**
+ * \defgroup hal_port Port HAL functions
+ * @{
+ */
+
+/** Get the pin name from the port's pin number
+ *
+ * @param port  The port name
+ * @param pin_n The pin number within the specified port
+ * @return The pin name for the port's pin number
+ */
+PinName port_pin(PortName port, int pin_n);
+
+/** Initilize the port
+ *
+ * @param obj  The port object to initialize
+ * @param port The port name
+ * @param mask The bitmask to identify which bits in the port should be included (0 - ignore)
+ * @param dir  The port direction
+ */
+void port_init(port_t *obj, PortName port, int mask, PinDirection dir);
+
+/** Set the input port mode
+ *
+ * @param obj  The port object
+ * @param mode THe port mode to be set
+ */
+void port_mode(port_t *obj, PinMode mode);
+
+/** Set port direction (in/out)
+ *
+ * @param obj The port object
+ * @param dir The port direction to be set
+ */
+void port_dir(port_t *obj, PinDirection dir);
+
+/** Write value to the port
+ *
+ * @param obj   The port object
+ * @param value The value to be set
+ */
+void port_write(port_t *obj, int value);
+
+/** Read the current value on the port
+ *
+ * @param obj The port object
+ * @return An integer with each bit corresponding to an associated port pin setting
+ */
+int port_read(port_t *obj);
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/pwmout_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/pwmout_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/pwmout_api.h	(revision 374)
@@ -0,0 +1,120 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_PWMOUT_API_H
+#define MBED_PWMOUT_API_H
+
+#include "device.h"
+
+#if DEVICE_PWMOUT
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Pwmout hal structure. pwmout_s is declared in the target's hal
+ */
+typedef struct pwmout_s pwmout_t;
+
+/**
+ * \defgroup hal_pwmout Pwmout hal functions
+ * @{
+ */
+
+/** Initialize the pwm out peripheral and configure the pin
+ *
+ * @param obj The pwmout object to initialize
+ * @param pin The pwmout pin to initialize
+ */
+void pwmout_init(pwmout_t *obj, PinName pin);
+
+/** Deinitialize the pwmout object
+ *
+ * @param obj The pwmout object
+ */
+void pwmout_free(pwmout_t *obj);
+
+/** Set the output duty-cycle in range <0.0f, 1.0f>
+ *
+ * Value 0.0f represents 0 percentage, 1.0f represents 100 percent.
+ * @param obj     The pwmout object
+ * @param percent The floating-point percentage number
+ */
+void pwmout_write(pwmout_t *obj, float percent);
+
+/** Read the current float-point output duty-cycle
+ *
+ * @param obj The pwmout object
+ * @return A floating-point output duty-cycle
+ */
+float pwmout_read(pwmout_t *obj);
+
+/** Set the PWM period specified in seconds, keeping the duty cycle the same
+ *
+ * Periods smaller than microseconds (the lowest resolution) are set to zero.
+ * @param obj     The pwmout object
+ * @param seconds The floating-point seconds period
+ */
+void pwmout_period(pwmout_t *obj, float seconds);
+
+/** Set the PWM period specified in miliseconds, keeping the duty cycle the same
+ *
+ * @param obj The pwmout object
+ * @param ms  The milisecond period
+ */
+void pwmout_period_ms(pwmout_t *obj, int ms);
+
+/** Set the PWM period specified in microseconds, keeping the duty cycle the same
+ *
+ * @param obj The pwmout object
+ * @param us  The microsecond period
+ */
+void pwmout_period_us(pwmout_t *obj, int us);
+
+/** Set the PWM pulsewidth specified in seconds, keeping the period the same.
+ *
+ * @param obj     The pwmout object
+ * @param seconds The floating-point pulsewidth in seconds
+ */
+void pwmout_pulsewidth(pwmout_t *obj, float seconds);
+
+/** Set the PWM pulsewidth specified in miliseconds, keeping the period the same.
+ *
+ * @param obj The pwmout object
+ * @param ms  The floating-point pulsewidth in miliseconds
+ */
+void pwmout_pulsewidth_ms(pwmout_t *obj, int ms);
+
+/** Set the PWM pulsewidth specified in microseconds, keeping the period the same.
+ *
+ * @param obj The pwmout object
+ * @param us  The floating-point pulsewidth in microseconds
+ */
+void pwmout_pulsewidth_us(pwmout_t *obj, int us);
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/rtc_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/rtc_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/rtc_api.h	(revision 374)
@@ -0,0 +1,77 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_RTC_API_H
+#define MBED_RTC_API_H
+
+#include "device.h"
+
+#if DEVICE_RTC
+
+#include <time.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup hal_rtc RTC hal functions
+ * @{
+ */
+
+/** Initialize the RTC peripheral
+ *
+ */
+void rtc_init(void);
+
+/** Deinitialize RTC
+ *
+ * TODO: The function is not used by rtc api in mbed-drivers.
+ */
+void rtc_free(void);
+
+/** Get the RTC enable status
+ *
+ * @retval 0 disabled
+ * @retval 1 enabled
+ */
+int rtc_isenabled(void);
+
+/** Get the current time from the RTC peripheral
+ *
+ * @return The current time
+ */
+time_t rtc_read(void);
+
+/** Set the current time to the RTC peripheral
+ *
+ * @param t The current time to be set
+ */
+void rtc_write(time_t t);
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/serial_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/serial_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/serial_api.h	(revision 374)
@@ -0,0 +1,307 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_SERIAL_API_H
+#define MBED_SERIAL_API_H
+
+#include "device.h"
+#include "hal/buffer.h"
+#include "hal/dma_api.h"
+
+#if DEVICE_SERIAL
+
+#define SERIAL_EVENT_TX_SHIFT (2)
+#define SERIAL_EVENT_RX_SHIFT (8)
+
+#define SERIAL_EVENT_TX_MASK (0x00FC)
+#define SERIAL_EVENT_RX_MASK (0x3F00)
+
+#define SERIAL_EVENT_ERROR (1 << 1)
+
+/**
+ * @defgroup SerialTXEvents Serial TX Events Macros
+ *
+ * @{
+ */
+#define SERIAL_EVENT_TX_COMPLETE (1 << (SERIAL_EVENT_TX_SHIFT + 0))
+#define SERIAL_EVENT_TX_ALL      (SERIAL_EVENT_TX_COMPLETE)
+/**@}*/
+
+/**
+ * @defgroup SerialRXEvents Serial RX Events Macros
+ *
+ * @{
+ */
+#define SERIAL_EVENT_RX_COMPLETE        (1 << (SERIAL_EVENT_RX_SHIFT + 0))
+#define SERIAL_EVENT_RX_OVERRUN_ERROR   (1 << (SERIAL_EVENT_RX_SHIFT + 1))
+#define SERIAL_EVENT_RX_FRAMING_ERROR   (1 << (SERIAL_EVENT_RX_SHIFT + 2))
+#define SERIAL_EVENT_RX_PARITY_ERROR    (1 << (SERIAL_EVENT_RX_SHIFT + 3))
+#define SERIAL_EVENT_RX_OVERFLOW        (1 << (SERIAL_EVENT_RX_SHIFT + 4))
+#define SERIAL_EVENT_RX_CHARACTER_MATCH (1 << (SERIAL_EVENT_RX_SHIFT + 5))
+#define SERIAL_EVENT_RX_ALL             (SERIAL_EVENT_RX_OVERFLOW | SERIAL_EVENT_RX_PARITY_ERROR | \
+                                         SERIAL_EVENT_RX_FRAMING_ERROR | SERIAL_EVENT_RX_OVERRUN_ERROR | \
+                                         SERIAL_EVENT_RX_COMPLETE | SERIAL_EVENT_RX_CHARACTER_MATCH)
+/**@}*/
+
+#define SERIAL_RESERVED_CHAR_MATCH (255)
+
+typedef enum {
+    ParityNone = 0,
+    ParityOdd = 1,
+    ParityEven = 2,
+    ParityForced1 = 3,
+    ParityForced0 = 4
+} SerialParity;
+
+typedef enum {
+    RxIrq,
+    TxIrq
+} SerialIrq;
+
+typedef enum {
+    FlowControlNone,
+    FlowControlRTS,
+    FlowControlCTS,
+    FlowControlRTSCTS
+} FlowControl;
+
+typedef void (*uart_irq_handler)(uint32_t id, SerialIrq event);
+
+#if DEVICE_SERIAL_ASYNCH
+/** Asynch serial HAL structure
+ */
+typedef struct {
+    struct serial_s serial;  /**< Target specific serial structure */
+    struct buffer_s tx_buff; /**< TX buffer */
+    struct buffer_s rx_buff; /**< RX buffer */
+    uint8_t char_match;      /**< Character to be matched */
+    uint8_t char_found;      /**< State of the matched character */
+} serial_t;
+
+#else
+/** Non-asynch serial HAL structure
+ */
+typedef struct serial_s serial_t;
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup hal_GeneralSerial Serial Configuration Functions
+ * @{
+ */
+
+/** Initialize the serial peripheral. It sets the default parameters for serial
+ *  peripheral, and configures its specifieds pins.
+ *
+ * @param obj The serial object
+ * @param tx  The TX pin name
+ * @param rx  The RX pin name
+ */
+void serial_init(serial_t *obj, PinName tx, PinName rx);
+
+/** Release the serial peripheral, not currently invoked. It requires further
+ *  resource management.
+ *
+ * @param obj The serial object
+ */
+void serial_free(serial_t *obj);
+
+/** Configure the baud rate
+ *
+ * @param obj      The serial object
+ * @param baudrate The baud rate to be configured
+ */
+void serial_baud(serial_t *obj, int baudrate);
+
+/** Configure the format. Set the number of bits, parity and the number of stop bits
+ *
+ * @param obj       The serial object
+ * @param data_bits The number of data bits
+ * @param parity    The parity
+ * @param stop_bits The number of stop bits
+ */
+void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits);
+
+/** The serial interrupt handler registration
+ *
+ * @param obj     The serial object
+ * @param handler The interrupt handler which will be invoked when the interrupt fires
+ * @param id      The SerialBase object
+ */
+void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id);
+
+/** Configure serial interrupt. This function is used for word-approach
+ *
+ * @param obj    The serial object
+ * @param irq    The serial IRQ type (RX or TX)
+ * @param enable Set to non-zero to enable events, or zero to disable them
+ */
+void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable);
+
+/** Get character. This is a blocking call, waiting for a character
+ *
+ * @param obj The serial object
+ */
+int  serial_getc(serial_t *obj);
+
+/** Send a character. This is a blocking call, waiting for a peripheral to be available
+ *  for writing
+ *
+ * @param obj The serial object
+ * @param c   The character to be sent
+ */
+void serial_putc(serial_t *obj, int c);
+
+/** Check if the serial peripheral is readable
+ *
+ * @param obj The serial object
+ * @return Non-zero value if a character can be read, 0 if nothing to read
+ */
+int  serial_readable(serial_t *obj);
+
+/** Check if the serial peripheral is writable
+ *
+ * @param obj The serial object
+ * @return Non-zero value if a character can be written, 0 otherwise.
+ */
+int  serial_writable(serial_t *obj);
+
+/** Clear the serial peripheral
+ *
+ * @param obj The serial object
+ */
+void serial_clear(serial_t *obj);
+
+/** Set the break
+ *
+ * @param obj The serial object
+ */
+void serial_break_set(serial_t *obj);
+
+/** Clear the break
+ *
+ * @param obj The serial object
+ */
+void serial_break_clear(serial_t *obj);
+
+/** Configure the TX pin for UART function.
+ *
+ * @param tx The pin name used for TX
+ */
+void serial_pinout_tx(PinName tx);
+
+/** Configure the serial for the flow control. It sets flow control in the hardware
+ *  if a serial peripheral supports it, otherwise software emulation is used.
+ *
+ * @param obj    The serial object
+ * @param type   The type of the flow control. Look at the available FlowControl types.
+ * @param rxflow The TX pin name
+ * @param txflow The RX pin name
+ */
+void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, PinName txflow);
+
+#if DEVICE_SERIAL_ASYNCH
+
+/**@}*/
+
+/**
+ * \defgroup hal_AsynchSerial Asynchronous Serial Hardware Abstraction Layer
+ * @{
+ */
+
+/** Begin asynchronous TX transfer. The used buffer is specified in the serial object,
+ *  tx_buff
+ *
+ * @param obj       The serial object
+ * @param tx        The transmit buffer
+ * @param tx_length The number of bytes to transmit
+ * @param tx_width  Deprecated argument
+ * @param handler   The serial handler
+ * @param event     The logical OR of events to be registered
+ * @param hint      A suggestion for how to use DMA with this transfer
+ * @return Returns number of data transfered, otherwise returns 0
+ */
+int serial_tx_asynch(serial_t *obj, const void *tx, size_t tx_length, uint8_t tx_width, uint32_t handler, uint32_t event, DMAUsage hint);
+
+/** Begin asynchronous RX transfer (enable interrupt for data collecting)
+ *  The used buffer is specified in the serial object - rx_buff
+ *
+ * @param obj        The serial object
+ * @param rx         The receive buffer
+ * @param rx_length  The number of bytes to receive
+ * @param rx_width   Deprecated argument
+ * @param handler    The serial handler
+ * @param event      The logical OR of events to be registered
+ * @param handler    The serial handler
+ * @param char_match A character in range 0-254 to be matched
+ * @param hint       A suggestion for how to use DMA with this transfer
+ */
+void serial_rx_asynch(serial_t *obj, void *rx, size_t rx_length, uint8_t rx_width, uint32_t handler, uint32_t event, uint8_t char_match, DMAUsage hint);
+
+/** Attempts to determine if the serial peripheral is already in use for TX
+ *
+ * @param obj The serial object
+ * @return Non-zero if the RX transaction is ongoing, 0 otherwise
+ */
+uint8_t serial_tx_active(serial_t *obj);
+
+/** Attempts to determine if the serial peripheral is already in use for RX
+ *
+ * @param obj The serial object
+ * @return Non-zero if the RX transaction is ongoing, 0 otherwise
+ */
+uint8_t serial_rx_active(serial_t *obj);
+
+/** The asynchronous TX and RX handler.
+ *
+ * @param obj The serial object
+ * @return Returns event flags if an RX transfer termination condition was met; otherwise returns 0
+ */
+int serial_irq_handler_asynch(serial_t *obj);
+
+/** Abort the ongoing TX transaction. It disables the enabled interupt for TX and
+ *  flushes the TX hardware buffer if TX FIFO is used
+ *
+ * @param obj The serial object
+ */
+void serial_tx_abort_asynch(serial_t *obj);
+
+/** Abort the ongoing RX transaction. It disables the enabled interrupt for RX and
+ *  flushes the RX hardware buffer if RX FIFO is used
+ *
+ * @param obj The serial object
+ */
+void serial_rx_abort_asynch(serial_t *obj);
+
+/**@}*/
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/sleep_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/sleep_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/sleep_api.h	(revision 374)
@@ -0,0 +1,69 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_SLEEP_API_H
+#define MBED_SLEEP_API_H
+
+#include "device.h"
+
+#if DEVICE_SLEEP
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Send the microcontroller to sleep
+ *
+ * The processor is setup ready for sleep, and sent to sleep using __WFI(). In this mode, the
+ * system clock to the core is stopped until a reset or an interrupt occurs. This eliminates
+ * dynamic power used by the processor, memory systems and buses. The processor, peripheral and
+ * memory state are maintained, and the peripherals continue to work and can generate interrupts.
+ *
+ * The processor can be woken up by any internal peripheral interrupt or external pin interrupt.
+ *
+ * @note
+ *  The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored.
+ * Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be
+ * able to access the LocalFileSystem
+ */
+void hal_sleep(void);
+
+/** Send the microcontroller to deep sleep
+ *
+ * This processor is setup ready for deep sleep, and sent to sleep using __WFI(). This mode
+ * has the same sleep features as sleep plus it powers down peripherals and clocks. All state
+ * is still maintained.
+ *
+ * The processor can only be woken up by an external interrupt on a pin or a watchdog timer.
+ *
+ * @note
+ *  The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored.
+ * Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be
+ * able to access the LocalFileSystem
+ */
+void hal_deepsleep(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/spi_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/spi_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/spi_api.h	(revision 374)
@@ -0,0 +1,237 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_SPI_API_H
+#define MBED_SPI_API_H
+
+#include "device.h"
+#include "hal/dma_api.h"
+#include "hal/buffer.h"
+
+#if DEVICE_SPI
+
+#define SPI_EVENT_ERROR       (1 << 1)
+#define SPI_EVENT_COMPLETE    (1 << 2)
+#define SPI_EVENT_RX_OVERFLOW (1 << 3)
+#define SPI_EVENT_ALL         (SPI_EVENT_ERROR | SPI_EVENT_COMPLETE | SPI_EVENT_RX_OVERFLOW)
+
+#define SPI_EVENT_INTERNAL_TRANSFER_COMPLETE (1 << 30) // Internal flag to report that an event occurred
+
+#define SPI_FILL_WORD         (0xFFFF)
+
+#if DEVICE_SPI_ASYNCH
+/** Asynch SPI HAL structure
+ */
+typedef struct {
+    struct spi_s spi;        /**< Target specific SPI structure */
+    struct buffer_s tx_buff; /**< Tx buffer */
+    struct buffer_s rx_buff; /**< Rx buffer */
+} spi_t;
+
+#else
+/** Non-asynch SPI HAL structure
+ */
+typedef struct spi_s spi_t;
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup hal_GeneralSPI SPI Configuration Functions
+ * @{
+ */
+
+/** Initialize the SPI peripheral
+ *
+ * Configures the pins used by SPI, sets a default format and frequency, and enables the peripheral
+ * @param[out] obj  The SPI object to initialize
+ * @param[in]  mosi The pin to use for MOSI
+ * @param[in]  miso The pin to use for MISO
+ * @param[in]  sclk The pin to use for SCLK
+ * @param[in]  ssel The pin to use for SSEL
+ */
+void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel);
+
+/** Release a SPI object
+ *
+ * TODO: spi_free is currently unimplemented
+ * This will require reference counting at the C++ level to be safe
+ *
+ * Return the pins owned by the SPI object to their reset state
+ * Disable the SPI peripheral
+ * Disable the SPI clock
+ * @param[in] obj The SPI object to deinitialize
+ */
+void spi_free(spi_t *obj);
+
+/** Configure the SPI format
+ *
+ * Set the number of bits per frame, configure clock polarity and phase, shift order and master/slave mode.
+ * The default bit order is MSB.
+ * @param[in,out] obj   The SPI object to configure
+ * @param[in]     bits  The number of bits per frame
+ * @param[in]     mode  The SPI mode (clock polarity, phase, and shift direction)
+ * @param[in]     slave Zero for master mode or non-zero for slave mode
+ */
+void spi_format(spi_t *obj, int bits, int mode, int slave);
+
+/** Set the SPI baud rate
+ *
+ * Actual frequency may differ from the desired frequency due to available dividers and bus clock
+ * Configures the SPI peripheral's baud rate
+ * @param[in,out] obj The SPI object to configure
+ * @param[in]     hz  The baud rate in Hz
+ */
+void spi_frequency(spi_t *obj, int hz);
+
+/**@}*/
+/**
+ * \defgroup SynchSPI Synchronous SPI Hardware Abstraction Layer
+ * @{
+ */
+
+/** Write a byte out in master mode and receive a value
+ *
+ * @param[in] obj   The SPI peripheral to use for sending
+ * @param[in] value The value to send
+ * @return Returns the value received during send
+ */
+int  spi_master_write(spi_t *obj, int value);
+
+/** Write a block out in master mode and receive a value
+ *
+ *  The total number of bytes sent and received will be the maximum of
+ *  tx_length and rx_length. The bytes written will be padded with the
+ *  value 0xff.
+ *
+ * @param[in] obj        The SPI peripheral to use for sending
+ * @param[in] tx_buffer  Pointer to the byte-array of data to write to the device
+ * @param[in] tx_length  Number of bytes to write, may be zero
+ * @param[in] rx_buffer  Pointer to the byte-array of data to read from the device
+ * @param[in] rx_length  Number of bytes to read, may be zero
+ * @param[in] write_fill Default data transmitted while performing a read
+ * @returns
+ *      The number of bytes written and read from the device. This is
+ *      maximum of tx_length and rx_length.
+ */
+int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, char write_fill);
+
+/** Check if a value is available to read
+ *
+ * @param[in] obj The SPI peripheral to check
+ * @return non-zero if a value is available
+ */
+int  spi_slave_receive(spi_t *obj);
+
+/** Get a received value out of the SPI receive buffer in slave mode
+ *
+ * Blocks until a value is available
+ * @param[in] obj The SPI peripheral to read
+ * @return The value received
+ */
+int  spi_slave_read(spi_t *obj);
+
+/** Write a value to the SPI peripheral in slave mode
+ *
+ * Blocks until the SPI peripheral can be written to
+ * @param[in] obj   The SPI peripheral to write
+ * @param[in] value The value to write
+ */
+void spi_slave_write(spi_t *obj, int value);
+
+/** Checks if the specified SPI peripheral is in use
+ *
+ * @param[in] obj The SPI peripheral to check
+ * @return non-zero if the peripheral is currently transmitting
+ */
+int  spi_busy(spi_t *obj);
+
+/** Get the module number
+ *
+ * @param[in] obj The SPI peripheral to check
+ * @return The module number
+ */
+uint8_t spi_get_module(spi_t *obj);
+
+/**@}*/
+
+#if DEVICE_SPI_ASYNCH
+/**
+ * \defgroup AsynchSPI Asynchronous SPI Hardware Abstraction Layer
+ * @{
+ */
+
+/** Begin the SPI transfer. Buffer pointers and lengths are specified in tx_buff and rx_buff
+ *
+ * @param[in] obj       The SPI object that holds the transfer information
+ * @param[in] tx        The transmit buffer
+ * @param[in] tx_length The number of bytes to transmit
+ * @param[in] rx        The receive buffer
+ * @param[in] rx_length The number of bytes to receive
+ * @param[in] bit_width The bit width of buffer words
+ * @param[in] event     The logical OR of events to be registered
+ * @param[in] handler   SPI interrupt handler
+ * @param[in] hint      A suggestion for how to use DMA with this transfer
+ */
+void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint8_t bit_width, uint32_t handler, uint32_t event, DMAUsage hint);
+
+/** The asynchronous IRQ handler
+ *
+ * Reads the received values out of the RX FIFO, writes values into the TX FIFO and checks for transfer termination
+ * conditions, such as buffer overflows or transfer complete.
+ * @param[in] obj     The SPI object that holds the transfer information
+ * @return Event flags if a transfer termination condition was met; otherwise 0.
+ */
+uint32_t spi_irq_handler_asynch(spi_t *obj);
+
+/** Attempts to determine if the SPI peripheral is already in use
+ *
+ * If a temporary DMA channel has been allocated, peripheral is in use.
+ * If a permanent DMA channel has been allocated, check if the DMA channel is in use.  If not, proceed as though no DMA
+ * channel were allocated.
+ * If no DMA channel is allocated, check whether tx and rx buffers have been assigned.  For each assigned buffer, check
+ * if the corresponding buffer position is less than the buffer length.  If buffers do not indicate activity, check if
+ * there are any bytes in the FIFOs.
+ * @param[in] obj The SPI object to check for activity
+ * @return Non-zero if the SPI port is active or zero if it is not.
+ */
+uint8_t spi_active(spi_t *obj);
+
+/** Abort an SPI transfer
+ *
+ * @param obj The SPI peripheral to stop
+ */
+void spi_abort_asynch(spi_t *obj);
+
+
+#endif
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif // SPI_DEVICE
+
+#endif // MBED_SPI_API_H
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/ticker_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/ticker_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/ticker_api.h	(revision 374)
@@ -0,0 +1,121 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_TICKER_API_H
+#define MBED_TICKER_API_H
+
+#include <stdint.h>
+#include "device.h"
+
+typedef uint32_t timestamp_t;
+
+/** Ticker's event structure
+ */
+typedef struct ticker_event_s {
+    timestamp_t            timestamp; /**< Event's timestamp */
+    uint32_t               id;        /**< TimerEvent object */
+    struct ticker_event_s *next;      /**< Next event in the queue */
+} ticker_event_t;
+
+typedef void (*ticker_event_handler)(uint32_t id);
+
+/** Ticker's interface structure - required API for a ticker
+ */
+typedef struct {
+    void (*init)(void);                           /**< Init function */
+    uint32_t (*read)(void);                       /**< Read function */
+    void (*disable_interrupt)(void);              /**< Disable interrupt function */
+    void (*clear_interrupt)(void);                /**< Clear interrupt function */
+    void (*set_interrupt)(timestamp_t timestamp); /**< Set interrupt function */
+} ticker_interface_t;
+
+/** Ticker's event queue structure
+ */
+typedef struct {
+    ticker_event_handler event_handler; /**< Event handler */
+    ticker_event_t *head;               /**< A pointer to head */
+} ticker_event_queue_t;
+
+/** Ticker's data structure
+ */
+typedef struct {
+    const ticker_interface_t *interface; /**< Ticker's interface */
+    ticker_event_queue_t *queue;         /**< Ticker's event queue */
+} ticker_data_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup hal_ticker Ticker HAL functions
+ * @{
+ */
+
+/** Initialize a ticker and set the event handler
+ *
+ * @param data    The ticker's data
+ * @param handler A handler to be set
+ */
+void ticker_set_handler(const ticker_data_t *const data, ticker_event_handler handler);
+
+/** IRQ handler that goes through the events to trigger overdue events.
+ *
+ * @param data    The ticker's data
+ */
+void ticker_irq_handler(const ticker_data_t *const data);
+
+/** Remove an event from the queue
+ *
+ * @param data The ticker's data
+ * @param obj  The event object to be removed from the queue
+ */
+void ticker_remove_event(const ticker_data_t *const data, ticker_event_t *obj);
+
+/** Insert an event to the queue
+ *
+ * @param data      The ticker's data
+ * @param obj       The event object to be inserted to the queue
+ * @param timestamp The event's timestamp
+ * @param id        The event object
+ */
+void ticker_insert_event(const ticker_data_t *const data, ticker_event_t *obj, timestamp_t timestamp, uint32_t id);
+
+/** Read the current ticker's timestamp
+ *
+ * @param data The ticker's data
+ * @return The current timestamp
+ */
+timestamp_t ticker_read(const ticker_data_t *const data);
+
+/** Read the next event's timestamp
+ *
+ * @param data The ticker's data
+ * @return 1 if timestamp is pending event, 0 if there's no event pending
+ */
+int ticker_get_next_timestamp(const ticker_data_t *const data, timestamp_t *timestamp);
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/us_ticker_api.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/us_ticker_api.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/hal/us_ticker_api.h	(revision 374)
@@ -0,0 +1,83 @@
+
+/** \addtogroup hal */
+/** @{*/
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_US_TICKER_API_H
+#define MBED_US_TICKER_API_H
+
+#include <stdint.h>
+#include "hal/ticker_api.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup hal_UsTicker Microseconds Ticker Functions
+ * @{
+ */
+
+/** Get ticker's data
+ *
+ * @return The low power ticker data
+ */
+const ticker_data_t* get_us_ticker_data(void);
+
+
+/** The wrapper for ticker_irq_handler, to pass us ticker's data
+ *
+ */
+void us_ticker_irq_handler(void);
+
+/* HAL us ticker */
+
+/** Initialize the ticker
+ *
+ */
+void us_ticker_init(void);
+
+/** Read the current counter
+ *
+ * @return The current timer's counter value in microseconds
+ */
+uint32_t us_ticker_read(void);
+
+/** Set interrupt for specified timestamp
+ *
+ * @param timestamp The time in microseconds to be set
+ */
+void us_ticker_set_interrupt(timestamp_t timestamp);
+
+/** Disable us ticker interrupt
+ *
+ */
+void us_ticker_disable_interrupt(void);
+
+/** Clear us ticker interrupt
+ *
+ */
+void us_ticker_clear_interrupt(void);
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/** @}*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/platform/mbed_critical.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/platform/mbed_critical.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/platform/mbed_critical.h	(revision 374)
@@ -0,0 +1,17 @@
+#ifndef MBED_CRITICAL_H
+#define MBED_CRITICAL_H
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void core_util_critical_section_enter(void);
+void core_util_critical_section_exit(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/platform/mbed_error.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/platform/mbed_error.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/platform/mbed_error.h	(revision 374)
@@ -0,0 +1,16 @@
+#ifndef MBED_ERROR_H
+#define MBED_ERROR_H
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void error(const char *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/tMbedSerial.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/tMbedSerial.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/tMbedSerial.c	(revision 374)
@@ -0,0 +1,204 @@
+/*
+ *  TOPPERS/ASP Kernel
+ *      Toyohashi Open Platform for Embedded Real-Time Systems/
+ *      Advanced Standard Profile Kernel
+ * 
+ *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
+ *              Graduate School of Information Science, Nagoya Univ., JAPAN
+ * 
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  $Id$
+ */
+
+/*
+ *		FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドライバ
+ */
+
+#include <sil.h>
+#include "tMbedSerial_tecsgen.h"
+#include "serial_api.h"
+
+static void mbed_serial_irq_handler(uint32_t id, SerialIrq event);
+
+/*
+ *  シリアルI/Oポートのオープン
+ */
+void
+eSIOPort_open(CELLIDX idx)
+{
+	CELLCB	*p_cellcb = GET_CELLCB(idx);
+	serial_t *obj = &p_cellcb->serial;
+	uint_t	brr;
+
+	if (VAR_initialized) {
+		/*
+		 *  既に初期化している場合は、二重に初期化しない．
+		 */
+		return;
+	}
+
+	serial_init(obj, ATTR_tx, ATTR_rx);
+	serial_baud(obj, ATTR_baudRate);
+	serial_format(obj, 8, ParityNone, 1);
+
+	serial_irq_handler(obj, mbed_serial_irq_handler, idx);
+
+	VAR_initialized = true;
+}
+
+/*
+ *  シリアルI/Oポートのクローズ
+ */
+void
+eSIOPort_close(CELLIDX idx)
+{
+	CELLCB	*p_cellcb = GET_CELLCB(idx);
+	serial_t *obj = &p_cellcb->serial;
+
+	serial_free(obj);
+}
+
+/*
+ *  シリアルI/Oポートへの文字送信
+ */
+bool_t
+eSIOPort_putChar(CELLIDX idx, char c)
+{
+	CELLCB	*p_cellcb = GET_CELLCB(idx);
+	serial_t *obj = &p_cellcb->serial;
+
+	if (serial_writable(obj)){
+		serial_putc(obj, c);
+		return(true);
+	}
+	return(false);
+}
+
+/*
+ *  シリアルI/Oポートからの文字受信
+ */
+int_t
+eSIOPort_getChar(CELLIDX idx)
+{
+	CELLCB	*p_cellcb = GET_CELLCB(idx);
+	serial_t *obj = &p_cellcb->serial;
+	char	c;
+
+	if (serial_readable(obj)) {
+		return serial_getc(obj);
+	}
+	return(-1);
+}
+
+/*
+ *  シリアルI/Oポートからのコールバックの許可
+ */
+void
+eSIOPort_enableCBR(CELLIDX idx, uint_t cbrtn)
+{
+	CELLCB		*p_cellcb = GET_CELLCB(idx);
+	serial_t *obj = &p_cellcb->serial;
+
+	switch (cbrtn) {
+	case SIOSendReady:
+		serial_irq_set(obj, TxIrq, true);
+		break;
+	case SIOReceiveReady:
+		serial_irq_set(obj, RxIrq, true);
+		break;
+	}
+}
+
+/*
+ *  シリアルI/Oポートからのコールバックの禁止
+ */
+void
+eSIOPort_disableCBR(CELLIDX idx, uint_t cbrtn)
+{
+	CELLCB		*p_cellcb = GET_CELLCB(idx);
+	serial_t *obj = &p_cellcb->serial;
+
+	switch (cbrtn) {
+	case SIOSendReady:
+		serial_irq_set(obj, TxIrq, false);
+		break;
+	case SIOReceiveReady:
+		serial_irq_set(obj, RxIrq, false);
+		break;
+	}
+}
+
+/*
+ *  シリアルI/Oポートに対する受信割込み処理
+ */
+void
+eiRxISR_main(CELLIDX idx)
+{
+	CELLCB	*p_cellcb = GET_CELLCB(idx);
+	serial_t *obj = &p_cellcb->serial;
+
+	if (serial_readable(obj)) {
+		/*
+		 *  受信通知コールバックルーチンを呼び出す．
+		 */
+		ciSIOCBR_readyReceive();
+	}
+}
+
+/*
+ *  シリアルI/Oポートに対する送信割込み処理
+ */
+void
+eiTxISR_main(CELLIDX idx)
+{
+	CELLCB	*p_cellcb = GET_CELLCB(idx);
+	serial_t *obj = &p_cellcb->serial;
+
+	if (serial_writable(obj)) {
+		/*
+		 *  送信可能コールバックルーチンを呼び出す．
+		 */
+		ciSIOCBR_readySend();
+	}
+}
+
+void
+mbed_serial_irq_handler(uint32_t id, SerialIrq event)
+{
+	switch (event) {
+	case TxIrq:
+		eiTxISR_main(id);
+		break;
+	case RxIrq:
+		eiRxISR_main(id);
+		break;
+	}
+}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/tMbedSerial.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/tMbedSerial.cdl	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/tMbedSerial.cdl	(revision 374)
@@ -0,0 +1,70 @@
+/*
+ *  TOPPERS Software
+ *      Toyohashi Open Platform for Embedded Real-Time Systems
+ * 
+ *  Copyright (C) 2015 by Ushio Laboratory
+ *              Graduate School of Engineering Science, Osaka Univ., JAPAN
+ *  Copyright (C) 2015,2016 by Embedded and Real-Time Systems Laboratory
+ *              Graduate School of Information Science, Nagoya Univ., JAPAN
+ * 
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  $Id$
+ */
+
+/*
+ *		FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドラ
+ *		イバのコンポーネント記述
+ */
+
+/*
+ *  FIFO内蔵シリアルコミュニケーションインタフェースに関する定義のイン
+ *  ポート
+ */
+import_C("serial_api.h");
+
+/*
+ *  FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドライバ
+ *  のセルタイプ
+ */
+celltype tMbedSerial {
+	entry	sSIOPort	eSIOPort;
+	call	siSIOCBR	ciSIOCBR;
+
+	attr {
+		int32_t tx;
+		int32_t rx;
+		uint32_t	baudRate;		/* ボーレートの設定値 */
+	};
+	var {
+		bool_t		initialized = false;	/* 初期化済み */
+		serial_t	serial;
+	};
+};
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/target/device.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/target/device.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/target/device.h	(revision 374)
@@ -0,0 +1,128 @@
+/*
+ *  TOPPERS ECHONET Lite Communication Middleware
+ * 
+ *  Copyright (C) 2014-2018 Cores Co., Ltd. Japan
+ * 
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+#ifndef _MBED_API_H_
+#define _MBED_API_H_
+
+#include <time.h>
+#include "PinNames.h"
+
+#define DEVICE_ANALOGIN		1
+#define DEVICE_ANALOGOUT	1
+#define DEVICE_PWMOUT		1
+#define DEVICE_SERIAL		1
+#define DEVICE_SPI			1
+#define DEVICE_I2C			1
+#define DEVICE_RTC			1
+#define DEVICE_SLEEP		1
+
+void mbed_api_init(void);
+
+void wait_ms(int ms);
+uint32_t us_ticker_read(void);
+
+typedef struct gpio_s {
+	PinName  pin;
+	PinDirection dir;
+	PinMode mode;
+} gpio_t;
+
+typedef struct analogin_s {
+	PinName pin;
+} analogin_t;
+
+typedef struct dac_s {
+	PinName pin;
+} dac_t;
+
+typedef struct pwmout_s {
+	PinName pin;
+} pwmout_t;
+
+void arduino_tick();
+
+typedef struct serial_s {
+	void *base_address;
+	int rxi_intno;
+	int tei_intno;
+} serial_t;
+
+typedef struct i2c_s {
+	void *base_address;
+	int rxi_intno;
+	int txi_intno;
+	int tei_intno;
+	unsigned char rxdata[16];
+} i2c_t;
+
+#define SPI_FILL_CHAR         (0xFF)
+
+typedef struct spi_s {
+	void *base_address;
+	int rxi_intno;
+	int txi_intno;
+	int tei_intno;
+} spi_t;
+
+void sci0_rxi_handler(void);
+void sci0_txi_handler(void);
+void sci0_tei_handler(void);
+
+void sci1_rxi_handler(void);
+void sci1_txi_handler(void);
+void sci1_tei_handler(void);
+
+void sci2_rxi_handler(void);
+void sci2_txi_handler(void);
+void sci2_tei_handler(void);
+
+void sci3_rxi_handler(void);
+void sci3_txi_handler(void);
+void sci3_tei_handler(void);
+
+void sci4_rxi_handler(void);
+void sci4_txi_handler(void);
+void sci4_tei_handler(void);
+
+void sci5_rxi_handler(void);
+void sci5_txi_handler(void);
+void sci5_tei_handler(void);
+
+void sci6_rxi_handler(void);
+void sci6_txi_handler(void);
+void sci6_tei_handler(void);
+
+#endif /* _MBED_API_H_ */
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/target/mbed_api.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/target/mbed_api.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/target/mbed_api.c	(revision 374)
@@ -0,0 +1,2010 @@
+/*
+ *  TOPPERS ECHONET Lite Communication Middleware
+ *
+ *  Copyright (C) 2014-2018 Cores Co., Ltd. Japan
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ *
+ *  @(#) $Id$
+ */
+
+#include <stdint.h>
+#include <time.h>
+#include <gpio_api.h>
+#include <ticker_api.h>
+#include <serial_api.h>
+#include <kernel.h>
+#include <sil.h>
+#include <t_syslog.h>
+#include "rx630.h"
+#include "target_stddef.h"
+#include "target_kernel_impl.h"
+#include "scif.h"
+
+ /* PWM出力(490Hz) */
+#define TPU_BASE_COUNTER	(48000000 / 4 / 490)
+
+void mbed_api_init()
+{
+}
+
+void error(const char *text)
+{
+	syslog(LOG_ERROR, text);
+}
+
+void core_util_critical_section_enter(void)
+{
+
+}
+
+void core_util_critical_section_exit(void)
+{
+
+}
+
+void wait_ms(int ms)
+{
+	dly_tsk(ms * 1000);
+}
+
+void us_ticker_init(void)
+{
+}
+
+void us_ticker_set_interrupt(timestamp_t timestamp)
+{
+}
+
+void us_ticker_disable_interrupt(void)
+{
+}
+
+void us_ticker_clear_interrupt(void)
+{
+}
+
+uint32_t us_ticker_read(void)
+{
+	SYSTIM result;
+	get_tim(&result);
+	return result;
+}
+
+void gpio_init(gpio_t *obj, PinName pin)
+{
+	obj->pin = pin;
+	obj->dir = PIN_INPUT;
+	obj->mode = PullDefault;
+}
+
+
+static bool_t pin_function_table[8] = {
+	true, true, true, true, true, true, true, true
+};
+
+static ER change_pin_function(int pin, bool_t gpio)
+{
+	ER result = E_PAR;
+
+	if ((pin < 0) || (pin >= 8))
+		return E_PAR;
+
+	if (pin_function_table[pin] == gpio)
+		return E_OK;
+
+	/* 汎用入出力ポートに設定 */
+	switch (pin) {
+	case D0:
+		/* P21 */
+		sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) & ~PORT_PMR_B1_BIT);
+		break;
+	case D1:
+		/* P20 */
+		sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) & ~PORT_PMR_B0_BIT);
+		break;
+	case D2:
+		/* P22 */
+		sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) & ~PORT_PMR_B2_BIT);
+		break;
+	case D3:
+		/* P23 */
+		sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) & ~PORT_PMR_B3_BIT);
+		break;
+	case D4:
+		/* P24 */
+		sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) & ~PORT_PMR_B4_BIT);
+		break;
+	case D5:
+		/* P25 */
+		sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) & ~PORT_PMR_B5_BIT);
+		break;
+	case D6:
+		/* P32 */
+		sil_wrb_mem(PORT3_PMR_ADDR, sil_reb_mem(PORT3_PMR_ADDR) & ~PORT_PMR_B2_BIT);
+		break;
+	case D7:
+		/* P33 */
+		sil_wrb_mem(PORT3_PMR_ADDR, sil_reb_mem(PORT3_PMR_ADDR) & ~PORT_PMR_B3_BIT);
+		break;
+	default:
+		break;
+	}
+
+	/* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */
+	sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
+	/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
+	sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
+
+	switch (pin) {
+		/* P21/TIOCA3 */
+	case D0:
+		if (gpio) {
+			/* P21端子機能制御レジスタ P21とする */
+			sil_wrb_mem(MPC_P21PFS_ADDR, 0x00);
+		}
+		else {
+			/* P21端子機能制御レジスタ TIOCA3とする */
+			sil_wrb_mem(MPC_P21PFS_ADDR, 0x03);
+		}
+		result = E_OK;
+		break;
+		/* P20/TIOCB3 */
+	case D1:
+		if (gpio) {
+			/* P20端子機能制御レジスタ P20とする */
+			sil_wrb_mem(MPC_P20PFS_ADDR, 0x00);
+		}
+		else {
+			/* P20端子機能制御レジスタ TIOCB3とする */
+			sil_wrb_mem(MPC_P20PFS_ADDR, 0x03);
+		}
+		result = E_OK;
+		break;
+		/* P22/TIOCC3 */
+	case D2:
+		if (gpio) {
+			/* P22端子機能制御レジスタ P22とする */
+			sil_wrb_mem(MPC_P22PFS_ADDR, 0x00);
+		}
+		else {
+			/* P22端子機能制御レジスタ TIOCC3とする */
+			sil_wrb_mem(MPC_P22PFS_ADDR, 0x03);
+		}
+		result = E_OK;
+		break;
+		/* P23/TIOCD3 */
+	case D3:
+		if (gpio) {
+			/* P23端子機能制御レジスタ P23とする */
+			sil_wrb_mem(MPC_P23PFS_ADDR, 0x00);
+		}
+		else {
+			/* P23端子機能制御レジスタ TIOCD3とする */
+			sil_wrb_mem(MPC_P23PFS_ADDR, 0x03);
+		}
+		result = E_OK;
+		break;
+		/* P24/TIOCB4 */
+	case D4:
+		if (gpio) {
+			/* P24端子機能制御レジスタ P24とする */
+			sil_wrb_mem(MPC_P24PFS_ADDR, 0x00);
+		}
+		else {
+			/* P24端子機能制御レジスタ TIOCB4とする */
+			sil_wrb_mem(MPC_P24PFS_ADDR, 0x03);
+		}
+		result = E_OK;
+		break;
+		/* P25/TIOCA4 */
+	case D5:
+		if (gpio) {
+			/* P25端子機能制御レジスタ P25とする */
+			sil_wrb_mem(MPC_P25PFS_ADDR, 0x00);
+		}
+		else {
+			/* P25端子機能制御レジスタ TIOCA4とする */
+			sil_wrb_mem(MPC_P25PFS_ADDR, 0x03);
+		}
+		result = E_OK;
+		break;
+		/* P32/TIOCC0 */
+	case D6:
+		if (gpio) {
+			/* P32端子機能制御レジスタ P32とする */
+			sil_wrb_mem(MPC_P32PFS_ADDR, 0x00);
+		}
+		else {
+			/* P32端子機能制御レジスタ TIOCC0とする */
+			sil_wrb_mem(MPC_P32PFS_ADDR, 0x03);
+		}
+		result = E_OK;
+		break;
+		/* P33/TIOCD0 */
+	case D7:
+		if (gpio) {
+			/* P33端子機能制御レジスタ P33とする */
+			sil_wrb_mem(MPC_P33PFS_ADDR, 0x00);
+		}
+		else {
+			/* P33端子機能制御レジスタ TIOCD0とする */
+			sil_wrb_mem(MPC_P33PFS_ADDR, 0x03);
+		}
+		result = E_OK;
+		break;
+	default:
+		break;
+	}
+
+	/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
+	sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
+
+	/* 機能ポートに設定 */
+	if (!gpio) {
+		switch (pin) {
+			/* P21/TIOCA3 */
+		case D0:
+			sil_wrb_mem(PORT2_PDR_ADDR, sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B1_BIT);
+			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B1_BIT);
+			break;
+			/* P20/TIOCB3 */
+		case D1:
+			sil_wrb_mem(PORT2_PDR_ADDR, sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B0_BIT);
+			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B0_BIT);
+			break;
+			/* P22/TIOCC3 */
+		case D2:
+			sil_wrb_mem(PORT2_PDR_ADDR, sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B2_BIT);
+			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B2_BIT);
+			break;
+			/* P23/TIOCD3 */
+		case D3:
+			sil_wrb_mem(PORT2_PDR_ADDR, sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B3_BIT);
+			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B3_BIT);
+			break;
+			/* P24/TIOCB4 */
+		case D4:
+			sil_wrb_mem(PORT2_PDR_ADDR, sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B4_BIT);
+			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B4_BIT);
+			break;
+			/* P25/TIOCA4 */
+		case D5:
+			sil_wrb_mem(PORT2_PDR_ADDR, sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B5_BIT);
+			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B5_BIT);
+			break;
+			/* P32/TIOCC0 */
+		case D6:
+			sil_wrb_mem(PORT3_PDR_ADDR, sil_reb_mem(PORT3_PDR_ADDR) | PORT_PDR_B2_BIT);
+			sil_wrb_mem(PORT3_PMR_ADDR, sil_reb_mem(PORT3_PMR_ADDR) | PORT_PMR_B2_BIT);
+			break;
+			/* P33/TIOCD0 */
+		case D7:
+			sil_wrb_mem(PORT3_PDR_ADDR, sil_reb_mem(PORT3_PDR_ADDR) | PORT_PDR_B3_BIT);
+			sil_wrb_mem(PORT3_PMR_ADDR, sil_reb_mem(PORT3_PMR_ADDR) | PORT_PMR_B3_BIT);
+			break;
+		default:
+			break;
+		}
+	}
+
+	pin_function_table[pin] = gpio;
+
+	return result;
+}
+
+static void change_pin_mode(gpio_t *obj)
+{
+	volatile __evenaccess uint8_t *pdr; int bit;
+
+	switch (obj->pin) {
+	case D0:
+		/* P21 */
+		pdr = PORT2_PDR_ADDR; bit = PORT_PDR_B1_BIT;
+		break;
+	case D1:
+		/* P20 */
+		pdr = PORT2_PDR_ADDR; bit = PORT_PDR_B0_BIT;
+		break;
+	case D2:
+		/* P22 */
+		pdr = PORT2_PDR_ADDR; bit = PORT_PDR_B2_BIT;
+		break;
+	case D3:
+		/* P23 */
+		pdr = PORT2_PDR_ADDR; bit = PORT_PDR_B3_BIT;
+		break;
+	case D4:
+		/* P24 */
+		pdr = PORT2_PDR_ADDR; bit = PORT_PDR_B4_BIT;
+		break;
+	case D5:
+		/* P25 */
+		pdr = PORT2_PDR_ADDR; bit = PORT_PDR_B5_BIT;
+		break;
+	case D6:
+		/* P32 */
+		pdr = PORT3_PDR_ADDR; bit = PORT_PDR_B2_BIT;
+		break;
+	case D7:
+		/* P33 */
+		pdr = PORT3_PDR_ADDR; bit = PORT_PDR_B3_BIT;
+		break;
+	case D8:
+		/* PC2 */
+		pdr = PORTC_PDR_ADDR; bit = PORT_PDR_B2_BIT;
+		break;
+	case D9:
+		/* PC3 */
+		pdr = PORTC_PDR_ADDR; bit = PORT_PDR_B3_BIT;
+		break;
+	case D10:
+		/* PC4 */
+		pdr = PORTC_PDR_ADDR; bit = PORT_PDR_B4_BIT;
+		break;
+	case D11:
+		/* PC6 */
+		pdr = PORTC_PDR_ADDR; bit = PORT_PDR_B6_BIT;
+		break;
+	case D12:
+		/* PC7 */
+		pdr = PORTC_PDR_ADDR; bit = PORT_PDR_B7_BIT;
+		break;
+	case D13:
+		/* PC5 */
+		pdr = PORTC_PDR_ADDR; bit = PORT_PDR_B5_BIT;
+		break;
+	default:
+		return;
+	}
+
+	volatile __evenaccess uint8_t *pcr = pdr + (PORT0_PCR_ADDR - PORT0_PDR_ADDR);
+
+	switch (obj->dir) {
+	case PIN_INPUT:
+		sil_wrb_mem(pdr, sil_reb_mem(pdr) & ~bit);
+		break;
+	case PIN_OUTPUT:
+		sil_wrb_mem(pdr, sil_reb_mem(pdr) | bit);
+		break;
+	default:
+		break;
+	}
+
+	switch (obj->mode) {
+	case PullUp:
+		sil_wrb_mem(pcr, sil_reb_mem(pcr) | bit);
+		break;
+	default:
+		sil_wrb_mem(pcr, sil_reb_mem(pcr) & ~bit);
+		break;
+	}
+}
+
+void gpio_mode(gpio_t *obj, PinMode mode)
+{
+	/* 汎用入出力ポートに設定 */
+	change_pin_function(obj->pin, true);
+
+	obj->mode = mode;
+
+	change_pin_mode(obj);
+}
+
+void gpio_dir(gpio_t *obj, PinDirection direction)
+{
+	/* 汎用入出力ポートに設定 */
+	change_pin_function(obj->pin, true);
+
+	obj->dir = direction;
+
+	change_pin_mode(obj);
+}
+
+void gpio_write(gpio_t *obj, int value)
+{
+	volatile __evenaccess uint8_t *podr;
+	int bit;
+
+	switch (obj->pin) {
+	case D0:
+		/* P21 */
+		podr = PORT2_PODR_ADDR; bit = PORT_PODR_B1_BIT;
+		break;
+	case D1:
+		/* P20 */
+		podr = PORT2_PODR_ADDR; bit = PORT_PODR_B0_BIT;
+		break;
+	case D2:
+		/* P22 */
+		podr = PORT2_PODR_ADDR; bit = PORT_PODR_B2_BIT;
+		break;
+	case D3:
+		/* P23 */
+		podr = PORT2_PODR_ADDR; bit = PORT_PODR_B3_BIT;
+		break;
+	case D4:
+		/* P24 */
+		podr = PORT2_PODR_ADDR; bit = PORT_PODR_B4_BIT;
+		break;
+	case D5:
+		/* P25 */
+		podr = PORT2_PODR_ADDR; bit = PORT_PODR_B5_BIT;
+		break;
+	case D6:
+		/* P32 */
+		podr = PORT3_PODR_ADDR; bit = PORT_PODR_B2_BIT;
+		break;
+	case D7:
+		/* P33 */
+		podr = PORT3_PODR_ADDR; bit = PORT_PODR_B3_BIT;
+		break;
+	case D8:
+		/* PC2 */
+		podr = PORTC_PODR_ADDR; bit = PORT_PODR_B2_BIT;
+		break;
+	case D9:
+		/* PC3 */
+		podr = PORTC_PODR_ADDR; bit = PORT_PODR_B3_BIT;
+		break;
+	case D10:
+		/* PC4 */
+		podr = PORTC_PODR_ADDR; bit = PORT_PODR_B4_BIT;
+		break;
+	case D11:
+		/* PC6 */
+		podr = PORTC_PODR_ADDR; bit = PORT_PODR_B6_BIT;
+		break;
+	case D12:
+		/* PC7 */
+		podr = PORTC_PODR_ADDR; bit = PORT_PODR_B7_BIT;
+		break;
+	case D13:
+		/* PC5 */
+		podr = PORTC_PODR_ADDR; bit = PORT_PODR_B5_BIT;
+		break;
+	default:
+		return;
+	}
+
+	switch (value) {
+	case 0:
+		sil_wrb_mem(podr, sil_reb_mem(podr) & ~bit);
+		break;
+	case 1:
+		sil_wrb_mem(podr, sil_reb_mem(podr) | bit);
+		break;
+	}
+}
+
+int gpio_read(gpio_t *obj)
+{
+	volatile __evenaccess uint8_t *pidr;
+	int bit;
+
+	switch (obj->pin) {
+	case D0:
+		/* P21 */
+		pidr = PORT2_PIDR_ADDR; bit = PORT_PIDR_B1_BIT;
+		break;
+	case D1:
+		/* P20 */
+		pidr = PORT2_PIDR_ADDR; bit = PORT_PIDR_B0_BIT;
+		break;
+	case D2:
+		/* P22 */
+		pidr = PORT2_PIDR_ADDR; bit = PORT_PIDR_B2_BIT;
+		break;
+	case D3:
+		/* P23 */
+		pidr = PORT2_PIDR_ADDR; bit = PORT_PIDR_B3_BIT;
+		break;
+	case D4:
+		/* P24 */
+		pidr = PORT2_PIDR_ADDR; bit = PORT_PIDR_B4_BIT;
+		break;
+	case D5:
+		/* P25 */
+		pidr = PORT2_PIDR_ADDR; bit = PORT_PIDR_B5_BIT;
+		break;
+	case D6:
+		/* P32 */
+		pidr = PORT3_PIDR_ADDR; bit = PORT_PIDR_B2_BIT;
+		break;
+	case D7:
+		/* P33 */
+		pidr = PORT3_PIDR_ADDR; bit = PORT_PIDR_B3_BIT;
+		break;
+	case D8:
+		/* PC2 */
+		pidr = PORTC_PIDR_ADDR; bit = PORT_PIDR_B2_BIT;
+		break;
+	case D9:
+		/* PC3 */
+		pidr = PORTC_PIDR_ADDR; bit = PORT_PIDR_B3_BIT;
+		break;
+	case D10:
+		/* PC4 */
+		pidr = PORTC_PIDR_ADDR; bit = PORT_PIDR_B4_BIT;
+		break;
+	case D11:
+		/* PC6 */
+		pidr = PORTC_PIDR_ADDR; bit = PORT_PIDR_B6_BIT;
+		break;
+	case D12:
+		/* PC7 */
+		pidr = PORTC_PIDR_ADDR; bit = PORT_PIDR_B7_BIT;
+		break;
+	case D13:
+		/* PC5 */
+		pidr = PORTC_PIDR_ADDR; bit = PORT_PIDR_B5_BIT;
+		break;
+	default:
+		return 0;
+	}
+
+	if ((sil_reb_mem(pidr) & bit) != 0) {
+		return 1;
+	}
+	else {
+		return 0;
+	}
+}
+
+void pin_function(PinName pin, int function)
+{
+}
+
+void pin_mode(PinName pin, PinMode mode)
+{
+
+}
+
+#define arduino_ad_table_count 64
+static uint16_t arduino_ad_table[8][arduino_ad_table_count];
+static int arduino_ad_pos = 0;
+static uint32_t arduino_ad_avelage[8];
+
+void analogin_init(analogin_t *obj, PinName pin)
+{
+	/*
+	* モジュールストップ機能の設定(S12AD)
+	*/
+	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非選択 */
+}
+
+uint16_t analogin_read_u16(analogin_t *obj)
+{
+	uint16_t result = 0;
+
+	switch (obj->pin) {
+	case A0:
+		/* *value = sil_reh_mem(S12AD_ADDR0_ADDR); */
+		result = (arduino_ad_avelage[0] / (arduino_ad_table_count));
+		break;
+	case A1:
+		/* *value = sil_reh_mem(S12AD_ADDR1_ADDR); */
+		result = (arduino_ad_avelage[1] / (arduino_ad_table_count));
+		break;
+	case A2:
+		/* *value = sil_reh_mem(S12AD_ADDR2_ADDR); */
+		result = (arduino_ad_avelage[2] / (arduino_ad_table_count));
+		break;
+	case A3:
+		/* *value = sil_reh_mem(S12AD_ADDR3_ADDR); */
+		result = (arduino_ad_avelage[3] / (arduino_ad_table_count));
+		break;
+	case A4:
+		/* *value = sil_reh_mem(S12AD_ADDR4_ADDR); */
+		result = (arduino_ad_avelage[4] / (arduino_ad_table_count));
+		break;
+	case A5:
+		/* *value = sil_reh_mem(S12AD_ADDR5_ADDR); */
+		result = (arduino_ad_avelage[5] / (arduino_ad_table_count));
+		break;
+	case A6:
+		/* *value = sil_reh_mem(S12AD_ADDR6_ADDR); */
+		result = (arduino_ad_avelage[6] / (arduino_ad_table_count));
+		break;
+	case A7:
+		/* *value = sil_reh_mem(S12AD_ADDR7_ADDR); */
+		result = (arduino_ad_avelage[7] / (arduino_ad_table_count));
+		break;
+	default:
+		return 0;
+	}
+
+	return 65535 - ((result << 4) | (result >> 8));
+}
+
+void arduino_tick()
+{
+	static volatile __evenaccess uint16_t *const regs[8] = {
+		S12AD_ADDR0_ADDR,
+		S12AD_ADDR1_ADDR,
+		S12AD_ADDR2_ADDR,
+		S12AD_ADDR3_ADDR,
+		S12AD_ADDR4_ADDR,
+		S12AD_ADDR5_ADDR,
+		S12AD_ADDR6_ADDR,
+		S12AD_ADDR7_ADDR
+	};
+	uint16_t ad_value;
+	int i;
+
+	/* ADCの変換結果取得 */
+	if ((sil_reb_mem(S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0) {
+		for (i = 0; i < 8; i++) {
+			arduino_ad_avelage[i] -= arduino_ad_table[i][arduino_ad_pos];
+			ad_value = sil_reh_mem(regs[i]);
+			arduino_ad_table[i][arduino_ad_pos] = ad_value;
+			arduino_ad_avelage[i] += ad_value;
+		}
+
+		arduino_ad_pos++;
+		if (arduino_ad_pos >= arduino_ad_table_count) {
+			arduino_ad_pos = 0;
+		}
+
+		/* 変換開始（シングルスキャンモード） */
+		sil_wrb_mem(S12AD_ADCSR_ADDR, S12AD_ADCSR_ADST_BIT);
+	}
+}
+
+void analogout_init(dac_t *obj, PinName pin)
+{
+}
+
+void analogout_write_u16(dac_t *obj, uint16_t value)
+{
+}
+
+void pwmout_init(pwmout_t* obj, PinName pin)
+{
+	/* 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_wrb_mem(TPU0_TCR_ADDR, (1 << TPU_TCR_TPSC_OFFSET) | (1 << TPU_TCR_CKEG_OFFSET)
+		| (1 << TPU_TCR_CCLR_OFFSET));
+	sil_wrb_mem(TPU3_TCR_ADDR, (1 << TPU_TCR_TPSC_OFFSET) | (1 << TPU_TCR_CKEG_OFFSET)
+		| (3 << TPU_TCR_CCLR_OFFSET));
+	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の設定 */
+	sil_wrh_mem(TPU0_TGRA_ADDR, TPU_BASE_COUNTER);
+	sil_wrh_mem(TPU0_TGRC_ADDR, 0);
+	sil_wrh_mem(TPU0_TGRD_ADDR, 0);
+	sil_wrh_mem(TPU3_TGRA_ADDR, 0);
+	sil_wrh_mem(TPU3_TGRB_ADDR, 0);
+	sil_wrh_mem(TPU3_TGRC_ADDR, 0);
+	sil_wrh_mem(TPU3_TGRD_ADDR, 0);
+	sil_wrh_mem(TPU4_TGRA_ADDR, 0);
+	sil_wrh_mem(TPU4_TGRB_ADDR, 0);
+	/* 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);
+}
+
+void pwmout_free(pwmout_t* obj)
+{
+	/* カウント動作終了 */
+	sil_wrb_mem(TPUA_TSTR_ADDR, 0);
+}
+
+void pwmout_period_us(pwmout_t* obj, int us)
+{
+}
+
+void pwmout_pulsewidth_us(pwmout_t* obj, int us)
+{
+}
+
+typedef enum {
+	sciSerial,
+	sciI2C,
+	sciSPIM,
+	sciSPIS,
+} sci_mode_t;
+
+void sci_enable(void *base_address, sci_mode_t mode)
+{
+	/*
+	 *  モジュールストップ機能の設定
+	 */
+	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_wrb_mem(SCI_SCR(base_address), 0x00U);
+
+	switch ((uint32_t)base_address) {
+	/* TXD/SDA/MOSI:P20, RXD/SCL/MISO:P21, SCK:P22 */
+	case SCI0_BASE:
+		switch (mode) {
+		case sciSerial:
+			/* HIGH状態に設定 */
+			sil_wrb_mem(PORT2_PODR_ADDR,
+				sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B1_BIT);
+			/* 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 */
+			sil_wrb_mem(PORT2_ODR0_ADDR,
+				(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状態に設定 */
+			sil_wrb_mem(PORT2_PODR_ADDR,
+				sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B1_BIT);
+			/* 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チャネルオープンドレイン */
+			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状態に設定 */
+			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入出力ポート設定 */
+			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 */
+			sil_wrb_mem(PORT2_ODR0_ADDR,
+				(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ビットへの書き込みを許可 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
+		/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
+
+		/* P20端子機能制御レジスタ TXD0/SMOSI0/SSDA0とする */
+		sil_wrb_mem(MPC_P20PFS_ADDR, 0x0A);
+		/* P21端子機能制御レジスタ RXD0/SMISO0/SSCL0とする */
+		sil_wrb_mem(MPC_P21PFS_ADDR, 0x0A);
+		if (mode == sciSPIM) {
+			/* P22端子機能制御レジスタ SCK0とする */
+			sil_wrb_mem(MPC_P22PFS_ADDR, 0x0A);
+		}
+
+		/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
+		break;
+	/* TXD/SDA/MOSI:P50, RXD/SCL/MISO:P52, SCK:P51 */
+	case SCI2_BASE:
+		switch (mode) {
+		case sciSerial:
+			/* HIGH状態に設定 */
+			sil_wrb_mem(PORT5_PODR_ADDR,
+				sil_reb_mem(PORT5_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B2_BIT);
+			/* 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 */
+			sil_wrb_mem(PORT5_ODR0_ADDR,
+				(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状態に設定 */
+			sil_wrb_mem(PORT5_PODR_ADDR,
+				sil_reb_mem(PORT5_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B2_BIT);
+			/* 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チャネルオープンドレイン */
+			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状態に設定 */
+			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入出力ポート設定 */
+			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 */
+			sil_wrb_mem(PORT5_ODR0_ADDR,
+				(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ビットへの書き込みを許可 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
+		/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
+
+		/* P50端子機能制御レジスタ SSDA2とする */
+		sil_wrb_mem(MPC_P50PFS_ADDR, 0x0A);
+		/* P52端子機能制御レジスタ SSCL2とする */
+		sil_wrb_mem(MPC_P52PFS_ADDR, 0x0A);
+		if (mode == sciSPIM) {
+			/* P51端子機能制御レジスタ SCK2とする */
+			sil_wrb_mem(MPC_P51PFS_ADDR, 0x0A);
+		}
+
+		/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
+		break;
+	/* TXD/SDA/MOSI:P23, RXD/SCL/MISO:P25, SCK:P24 */
+	case SCI3_BASE:
+		switch (mode) {
+		case sciSerial:
+			/* HIGH状態に設定 */
+			sil_wrb_mem(PORT2_PODR_ADDR,
+				sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B3_BIT | PORT_PODR_B5_BIT);
+			/* 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 */
+			sil_wrb_mem(PORT2_ODR0_ADDR,
+				(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状態に設定 */
+			sil_wrb_mem(PORT2_PODR_ADDR,
+				sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B3_BIT | PORT_PODR_B5_BIT);
+			/* 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チャネルオープンドレイン */
+			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状態に設定 */
+			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入出力ポート設定 */
+			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 */
+			sil_wrb_mem(PORT2_ODR0_ADDR,
+				(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ビットへの書き込みを許可 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
+		/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
+
+		/* P23端子機能制御レジスタ SSDA2とする */
+		sil_wrb_mem(MPC_P23PFS_ADDR, 0x0A);
+		/* P25端子機能制御レジスタ SSCL2とする */
+		sil_wrb_mem(MPC_P25PFS_ADDR, 0x0A);
+		if (mode == sciSPIM) {
+			/* P24端子機能制御レジスタ SCK2とする */
+			sil_wrb_mem(MPC_P24PFS_ADDR, 0x0A);
+		}
+
+		/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
+		break;
+	/* TXD/SDA/MOSI:P32, RXD/SCL/MISO:P33, SCK:P34 */
+	case SCI6_BASE:
+		switch (mode) {
+		case sciSerial:
+			/* HIGH状態に設定 */
+			sil_wrb_mem(PORT3_PODR_ADDR,
+				sil_reb_mem(PORT3_PODR_ADDR) | PORT_PODR_B2_BIT | PORT_PODR_B3_BIT);
+			/* 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 */
+			sil_wrb_mem(PORT3_ODR0_ADDR,
+				(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状態に設定 */
+			sil_wrb_mem(PORT3_PODR_ADDR,
+				sil_reb_mem(PORT3_PODR_ADDR) | PORT_PODR_B2_BIT | PORT_PODR_B3_BIT);
+			/* 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チャネルオープンドレイン */
+			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状態に設定 */
+			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入出力ポート設定 */
+			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 */
+			sil_wrb_mem(PORT3_ODR0_ADDR,
+				(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ビットへの書き込みを許可 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
+		/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
+
+		/* P32端子機能制御レジスタ TXD6/SMOSI6/SSDA6とする */
+		sil_wrb_mem(MPC_P32PFS_ADDR, 0x0A);
+		/* P33端子機能制御レジスタ RXD6/SMISO6/SSCL6とする */
+		sil_wrb_mem(MPC_P33PFS_ADDR, 0x0A);
+		if (mode == sciSPIM) {
+			/* P34端子機能制御レジスタ SCK6とする */
+			sil_wrb_mem(MPC_P34PFS_ADDR, 0x0A);
+		}
+
+		/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
+		break;
+	/* TXD/SDA/MOSI:PC7, RXD/SCL/MISO:PC6, SCK:PC5 */
+	case SCI8_BASE:
+		switch (mode) {
+		case sciSerial:
+			/* HIGH状態に設定 */
+			sil_wrb_mem(PORTC_PODR_ADDR,
+				sil_reb_mem(PORTC_PODR_ADDR) | PORT_PODR_B6_BIT | PORT_PODR_B7_BIT);
+			/* 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 */
+			sil_wrb_mem(PORTC_ODR0_ADDR,
+				(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状態に設定 */
+			sil_wrb_mem(PORTC_PODR_ADDR,
+				sil_reb_mem(PORTC_PODR_ADDR) | PORT_PODR_B6_BIT | PORT_PODR_B7_BIT);
+			/* 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チャネルオープンドレイン */
+			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状態に設定 */
+			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入出力ポート設定 */
+			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 */
+			sil_wrb_mem(PORTC_ODR0_ADDR,
+				(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ビットへの書き込みを許可 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
+		/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
+
+		/* PC7端子機能制御レジスタ TXD8/SMOSI8/SSDA8とする */
+		sil_wrb_mem(MPC_PC7PFS_ADDR, 0x0A);
+		/* PC6端子機能制御レジスタ RXD8/SMISO8/SSCL8とする */
+		sil_wrb_mem(MPC_PC6PFS_ADDR, 0x0A);
+		if (mode == sciSPIM) {
+			/* PC5端子機能制御レジスタ SCK8とする */
+			sil_wrb_mem(MPC_PC5PFS_ADDR, 0x0A);
+		}
+
+		/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
+		sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
+		break;
+	}
+}
+
+void sci_disable(void *base_address)
+{
+	/* 送受信禁止, SCKn端子は入出力ポートとして使用 */
+	sil_wrb_mem(SCI_SCR(base_address), 0x00U);
+
+	/*
+	 *  モジュールストップ機能の設定
+	 */
+	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);	/* 書込み禁止 */
+}
+
+void sci_set_frequency(void *base_address, int hz)
+{
+	uint_t	cnt, brr, clk;
+
+	cnt = (FREQ_PCLK * 1000) / (16 * hz);
+	if (cnt < 512)
+		clk = 0;
+	else if (cnt < 4 * 512)
+		clk = 1;
+	else if (cnt < 16 * 512)
+		clk = 2;
+	else if (cnt < 64 * 512)
+		clk = 3;
+	else
+		return;
+
+	brr = cnt / (1 << (2 * clk));
+	brr = (brr / 2) + (brr % 2) - 1;
+
+	/* SMRに送信／ 受信フォーマットを設定 */
+	/* クロック選択ビット(SMR.CKS[1:0]ビットを設定)、それ以外のビットを“0”に設定 */
+	sil_wrb_mem(SCI_SMR(base_address), clk);
+
+	/* ビットレートを設定 */
+	sil_wrb_mem(SCI_BRR(base_address), brr);
+}
+
+void serial_init(serial_t *obj, PinName tx, PinName rx)
+{
+#ifdef TOPPERS_GRCITRUS
+	if ((rx == D1) && (tx == D0)) {
+		obj->base_address = (void *)SCI0_BASE;
+		obj->rxi_intno = INT_SCI0_RXI;
+		obj->tei_intno = INT_SCI0_TEI;
+	}
+	else if ((rx == D6) && (tx == D5)) {
+		obj->base_address = (void *)SCI2_BASE;
+		obj->rxi_intno = INT_SCI2_RXI;
+		obj->tei_intno = INT_SCI2_TEI;
+	}
+	else if ((rx == D8) && (tx == D7)) {
+		obj->base_address = (void *)SCI6_BASE;
+		obj->rxi_intno = INT_SCI6_RXI;
+		obj->tei_intno = INT_SCI6_TEI;
+	}
+	else if ((rx == D11) && (tx == D12)) {
+		obj->base_address = (void *)SCI8_BASE;
+		obj->rxi_intno = INT_SCI8_RXI;
+		obj->tei_intno = INT_SCI8_TEI;
+	}
+	else {
+		obj->base_address = NULL;
+		return;
+	}
+#else
+	if ((rx == D0) && (tx == D1)) {
+		obj->base_address = (void *)SCI0_BASE;
+		obj->rxi_intno = INT_SCI0_RXI;
+		obj->tei_intno = INT_SCI0_TEI;
+	}
+	else if ((rx == D6) && (tx == D7)) {
+		obj->base_address = (void *)SCI6_BASE;
+		obj->rxi_intno = INT_SCI6_RXI;
+		obj->tei_intno = INT_SCI6_TEI;
+	}
+	else if ((rx == D11) && (tx == D12)) {
+		obj->base_address = (void *)SCI8_BASE;
+		obj->rxi_intno = INT_SCI8_RXI;
+		obj->tei_intno = INT_SCI8_TEI;
+}
+	else {
+		obj->base_address = NULL;
+		return;
+	}
+#endif // TOPPERS_GRCITRUS
+	dis_int(obj->rxi_intno);
+	dis_int(obj->tei_intno);
+
+	/* SCI有効 */
+	sci_enable(obj->base_address, sciSerial);
+
+	/* SIMR1.IICMビットを“0”に設定 */
+	sil_wrb_mem(SCI_SIMR1(obj->base_address),
+		sil_reb_mem(SCI_SIMR1(obj->base_address)) & ~IICM);
+
+	/* SPMR.CKPH, CKPOLビットを“0”に設定 */
+	sil_wrb_mem(SCI_SPMR(obj->base_address),
+		sil_reb_mem(SCI_SPMR(obj->base_address)) & ~(CKPH | CKPOL));
+
+	sci_set_frequency(obj->base_address, /*9600*/115200);
+
+	/* 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に送信／ 受信フォーマットを設定 */
+	serial_format(obj, 8, ParityNone, 1);
+
+	/* 送受信許可 */
+	sil_wrb_mem(SCI_SCR(obj->base_address),
+		(sil_reb_mem(SCI_SCR(obj->base_address)) | RE | TE));
+
+	ena_int(obj->rxi_intno);
+	ena_int(obj->tei_intno);
+}
+
+void serial_free(serial_t *obj)
+{
+	dis_int(obj->rxi_intno);
+	dis_int(obj->tei_intno);
+
+	/* SCI無効 */
+	sci_disable(obj->base_address);
+
+	obj->base_address = NULL;
+}
+
+void serial_baud(serial_t *obj, int baudrate)
+{
+	uint8_t scr = sil_reb_mem(SCI_SCR(obj->base_address));
+
+	/* 送受信禁止, 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);
+}
+
+void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits)
+{
+	uint8_t smr = sil_reb_mem(SCI_SMR(obj->base_address));
+
+	smr &= ~(PE | PM | CHR | STOP);
+
+	switch (parity) {
+	case ParityNone:
+		break;
+	case ParityOdd:
+		smr |= PE | PM;
+		break;
+	case ParityEven:
+		smr |= PE;
+		break;
+	default:
+		break;
+	}
+
+	switch (data_bits) {
+	case 7:
+		smr |= CHR;
+		break;
+	case 8:
+		break;
+	default:
+		break;
+	}
+
+	switch (stop_bits) {
+	case 1:
+		break;
+	case 2:
+		smr |= STOP;
+		break;
+	default:
+		break;
+	}
+
+	sil_wrb_mem(SCI_SMR(obj->base_address), smr);
+}
+
+int serial_getc(serial_t *obj)
+{
+	uint8_t ssr;
+	int c;
+
+	for (;;) {
+		/* SSR.ORER, PER, FERフラグをリード */
+		ssr = sil_reb_mem(SCI_SSR(obj->base_address));
+
+		/* 受信エラーが発生したとき */
+		if ((ssr & (ORER | PER | FER)) != 0) {
+			/* オーバランエラー */
+			if ((ssr & ORER) != 0) {
+				/* RDRレジスタをリード */
+				c = (int)sil_reb_mem(SCI_RDR(obj->base_address));
+			}
+			/* フレーミングエラー */
+			if ((ssr & FER) != 0) {
+			}
+			/* パリティエラー */
+			if ((ssr & PER) != 0) {
+			}
+		}
+
+		/* SSR.ORER, PER, FERフラグを“0”に設定 */
+		sil_wrb_mem(SCI_SSR(obj->base_address), ssr & ~(ORER | PER | FER));
+
+		/* SSR.ORER, PER, FERフラグをリード */
+		ssr = sil_reb_mem(SCI_SSR(obj->base_address));
+
+		/* RXI割り込み */
+		if (serial_readable(obj)) {
+			clear_int(obj->rxi_intno);
+			break;
+		}
+
+		dly_tsk(10);
+	}
+
+	/* RDRレジスタをリード */
+	c = (int)sil_reb_mem(SCI_RDR(obj->base_address));
+
+	return c;
+}
+
+void serial_putc(serial_t *obj, int c)
+{
+	while (!serial_writable(obj))
+		dly_tsk(10);
+
+	sil_wrb_mem(SCI_TDR(obj->base_address), (char)c);
+
+	clear_int(obj->tei_intno);
+}
+
+int serial_readable(serial_t *obj)
+{
+	//return probe_int(obj->rxi_intno);
+	return (sil_reb_mem(SCI_SSR(obj->base_address)) & RIE) != 0U;
+}
+
+int serial_writable(serial_t *obj)
+{
+	//return probe_int(obj->tei_intno);
+	return (sil_reb_mem(SCI_SSR(obj->base_address)) & TEIE) != 0U;
+}
+
+void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
+{
+	switch (irq) {
+	case RxIrq:
+		if (enable) {
+			sil_wrb_mem(SCI_SCR(obj->base_address),
+				(sil_reb_mem(SCI_SCR(obj->base_address)) | RIE));
+		}
+		else {
+			sil_wrb_mem(SCI_SCR(obj->base_address),
+				(sil_reb_mem(SCI_SCR(obj->base_address)) & (~RIE)));
+		}
+		break;
+	case TxIrq:
+		if (enable) {
+			sil_wrb_mem(SCI_SCR(obj->base_address),
+				(sil_reb_mem(SCI_SCR(obj->base_address)) | TEIE));
+		}
+		else {
+			sil_wrb_mem(SCI_SCR(obj->base_address),
+				(sil_reb_mem(SCI_SCR(obj->base_address)) & (~TEIE)));
+		}
+		break;
+	}
+}
+
+struct uart_irq_info_t {
+	uart_irq_handler handler;
+	uint32_t id;
+};
+
+struct uart_irq_info_t sci_irq_info[7];
+
+void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id)
+{
+	int no = SCI_NUM(obj->base_address);
+
+	sci_irq_info[no].handler = handler;
+	sci_irq_info[no].id = id;
+}
+
+void i2c_init(i2c_t *obj, PinName sda, PinName scl)
+{
+	if ((sda == I2C_SDA) && (scl == I2C_SCL)) {
+#ifdef TOPPERS_GRCITRUS
+		obj->base_address = (void *)SCI6_BASE;
+		obj->rxi_intno = INT_SCI6_RXI;
+		obj->txi_intno = INT_SCI6_TXI;
+		obj->tei_intno = INT_SCI6_TEI;
+#else
+		obj->base_address = (void *)SCI2_BASE;
+		obj->rxi_intno = INT_SCI2_RXI;
+		obj->txi_intno = INT_SCI2_TXI;
+		obj->tei_intno = INT_SCI2_TEI;
+#endif
+	}
+	else {
+		obj->base_address = NULL;
+		return;
+	}
+
+	/* SCI有効 */
+	sci_enable(obj->base_address, sciI2C);
+
+	/* 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”に設定 */
+	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ビットを設定 */
+	sil_wrb_mem(SCI_SEMR(obj->base_address), NFEN);
+
+	/* SNFRレジスタは、NFCS[2:0]ビットを設定*/
+	sil_wrb_mem(SCI_SNFR(obj->base_address), 1);
+
+	/* SIMR1レジスタは、IICMビットを“1”に設定し、IICDL[4:0]ビ	ットを設定 */
+	sil_wrb_mem(SCI_SIMR1(obj->base_address), IICM | (3 << 3));
+
+	/* SIMR2レジスタは、IICACKT、IICCSCビットを“1”に設定し、IICINTMビットを設定 */
+	sil_wrb_mem(SCI_SIMR2(obj->base_address), IICACKT | IICCSC | IICINTM);
+
+	/* 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));
+}
+
+void i2c_frequency(i2c_t *obj, int hz)
+{
+	uint8_t scr = sil_reb_mem(SCI_SCR(obj->base_address));
+
+	/* 送受信禁止, 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);
+}
+
+int i2c_start(i2c_t *obj)
+{
+	if (obj->base_address == NULL)
+		return 0;
+
+	/* SIMR3.IICSTAREQビットを“1”に設定すると同時に、
+	 * SIMR3.IICSCLS[1:0],IICSDAS[1:0]ビットを“01b”に設定 */
+	sil_wrb_mem(SCI_SIMR3(obj->base_address), IICSTAREQ | (1 << 4) | (1 << 6));
+
+	return 0;
+}
+
+int i2c_restart(i2c_t *obj)
+{
+	if (obj->base_address == NULL)
+		return 0;
+
+	sil_wrb_mem(SCI_SIMR3(obj->base_address), IICRSTAREQ | (1 << 4) | (1 << 6));
+
+	return 0;
+}
+
+int i2c_stop(i2c_t *obj)
+{
+	if (obj->base_address == NULL)
+		return 0;
+
+	/* SIMR3.IICSTPREQビットを“1”に設定すると同時に、
+	 * SIMR3.IICSCLS[1:0],IICSDAS[1:0]ビットを“01b”に設定 */
+	sil_wrb_mem(SCI_SIMR3(obj->base_address), IICSTPREQ | (1 << 4) | (1 << 6));
+
+	return 0;
+}
+
+int i2c_read(i2c_t *obj, int address, char *data, int length, int stop)
+{
+	if (obj->base_address == NULL)
+		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)割り込み発生確認 */
+	while (!probe_int(obj->tei_intno))
+		dly_tsk(2);
+	clear_int(obj->tei_intno);
+
+	/* 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”に設定 */
+	sil_wrb_mem(SCI_SIMR3(obj->base_address),
+		sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~((3 << 4) | (3 << 6)));
+
+	/* TDRレジスタにスレーブアドレス、R/Wビットをライト */
+	sil_wrb_mem(SCI_TDR(obj->base_address), address | 1);
+
+	/* TXI割り込み発生確認 */
+	while (!probe_int(obj->txi_intno))
+		dly_tsk(10);
+	clear_int(obj->txi_intno);
+
+	/* スレーブデバイスからのACKを確認 */
+	if ((sil_reb_mem(SCI_SISR(obj->base_address)) & IICACKR) == 0) {
+		/* SIMR2.IICACKTビットを“0”に設定 */
+		sil_wrb_mem(SCI_SIMR2(obj->base_address), sil_reb_mem(SCI_SIMR2(obj->base_address)) & ~IICACKT);
+		/* 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”に設定 */
+				sil_wrb_mem(SCI_SIMR2(obj->base_address), sil_reb_mem(SCI_SIMR2(obj->base_address)) | IICACKT);
+			}
+
+			/* TDRレジスタにダミーデータ“FFh”をライト */
+			sil_wrb_mem(SCI_TDR(obj->base_address), 0xFF);
+
+			/* RXI割り込み発生確認 */
+			while (!probe_int(obj->rxi_intno))
+				dly_tsk(10);
+			clear_int(obj->rxi_intno);
+
+			/* RDRレジスタの受信データをリード */
+			*data = sil_reb_mem(SCI_RDR(obj->base_address));
+			data++;
+
+			/* TXI割り込み発生確認 */
+			while (!probe_int(obj->txi_intno))
+				dly_tsk(10);
+			clear_int(obj->txi_intno);
+		}
+	}
+
+	if (stop) {
+		/* 停止条件の生成 */
+		i2c_stop(obj);
+
+		/* STI(TEI)割り込み発生確認 */
+		while (!probe_int(obj->tei_intno))
+			dly_tsk(2);
+		clear_int(obj->tei_intno);
+
+		/* 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”に設定 */
+		sil_wrb_mem(SCI_SIMR3(obj->base_address),
+			sil_reb_mem(SCI_SIMR3(obj->base_address)) | ((3 << 4) | (3 << 6)));
+	}
+
+	return length;
+}
+
+int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop)
+{
+	if (obj->base_address == NULL)
+		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)割り込み発生確認 */
+	while (!probe_int(obj->tei_intno))
+		dly_tsk(2);
+	clear_int(obj->tei_intno);
+
+	/* 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”に設定 */
+	sil_wrb_mem(SCI_SIMR3(obj->base_address),
+		sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~((3 << 4) | (3 << 6)));
+
+	/* TDRレジスタにスレーブアドレス、R/Wビットをライト */
+	sil_wrb_mem(SCI_TDR(obj->base_address), address);
+
+	/* TXI割り込み発生確認 */
+	while (!probe_int(obj->txi_intno))
+		dly_tsk(10);
+	clear_int(obj->txi_intno);
+
+	/* スレーブデバイスからのACKを確認 */
+	if ((sil_reb_mem(SCI_SISR(obj->base_address)) & IICACKR) == 0) {
+
+		for (int i = 0; i < length; i++) {
+			/* TDRレジスタにスレーブアドレス、R/Wビットをライト */
+			sil_wrb_mem(SCI_TDR(obj->base_address), *data);
+			data++;
+
+			/* TXI割り込み発生確認 */
+			while (!probe_int(obj->txi_intno))
+				dly_tsk(10);
+			clear_int(obj->txi_intno);
+		}
+	}
+
+	if (stop) {
+		/* 停止条件の生成 */
+		i2c_stop(obj);
+
+		/* STI(TEI)割り込み発生確認 */
+		while (!probe_int(obj->tei_intno))
+			dly_tsk(2);
+		clear_int(obj->tei_intno);
+
+		/* 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”に設定 */
+		sil_wrb_mem(SCI_SIMR3(obj->base_address),
+			sil_reb_mem(SCI_SIMR3(obj->base_address)) | ((3 << 4) | (3 << 6)));
+	}
+
+	return length;
+}
+
+int i2c_byte_read(i2c_t *obj, int last)
+{
+	if (obj->base_address == NULL)
+		return 0;
+
+	return 0;
+}
+
+int i2c_byte_write(i2c_t *obj, int data)
+{
+	if (obj->base_address == NULL)
+		return 0;
+
+	return 0;
+}
+
+void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel)
+{
+	if ((mosi == D11) && (miso == D12) && (sclk == D13) && ((ssel == D10) || (ssel == NC))) {
+		obj->base_address = (void *)SCI8_BASE;
+		obj->txi_intno = INT_SCI8_TXI;
+		obj->rxi_intno = INT_SCI8_RXI;
+		obj->tei_intno = INT_SCI8_TEI;
+	}
+	else if ((mosi == D3) && (miso == D6) && (sclk == D4) && (ssel == NC)) {
+		obj->base_address = (void *)SCI3_BASE;
+		obj->txi_intno = INT_SCI3_TXI;
+		obj->rxi_intno = INT_SCI3_RXI;
+		obj->tei_intno = INT_SCI3_TEI;
+	}
+	else {
+		obj->base_address = NULL;
+		return;
+	}
+
+	/* SCI有効 */
+	sci_enable(obj->base_address, (ssel != NC) ? sciSPIS : sciSPIM);
+
+	/* 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”に設定 */
+		sil_wrb_mem(SCI_SPMR(obj->base_address), 0);
+	}
+	else {
+		/* 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”に設定 */
+	sil_wrb_mem(SCI_SCMR(obj->base_address),
+		(sil_reb_mem(SCI_SCMR(obj->base_address)) & ~(SMIF | SDIR)) | SINV);
+
+	/* 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));
+}
+
+void spi_free(spi_t *obj)
+{
+	/* SCI無効 */
+	sci_disable(obj->base_address);
+
+	obj->base_address = NULL;
+}
+
+void spi_format(spi_t *obj, int bits, int mode, int slave)
+{
+	int polarity = (mode & 0x2) ? 1 : 0;
+	int phase = (mode & 0x1) ? 1 : 0;
+	uint8_t spmr;
+
+	if ((bits != 8) || (mode < 0) || (mode > 3)) {
+		return;
+	}
+
+	/* 送受信禁止, SCKn端子は入出力ポートとして使用 */
+	sil_wrb_mem(SCI_SCR(obj->base_address), 0x00U);
+
+	spmr = sil_reb_mem(SCI_SPMR(obj->base_address));
+
+	/* クロック極性反転あり/なし */
+	if (polarity)
+		spmr |= CKPOL;
+	else
+		spmr &= ~CKPOL;
+
+	/* クロック位相反転あり/なし */
+	if (phase)
+		spmr |= CKPH;
+	else
+		spmr &= ~CKPH;
+
+	if (slave) {
+		/* SCKn端子はクロック入力として使用 */
+		sil_wrb_mem(SCI_SCR(obj->base_address), 
+			(sil_reb_mem(SCI_SCR(obj->base_address)) & ~CKE) | 2);
+
+		/* SPMR.MSSビットを“1”に設定 */
+		sil_wrb_mem(SCI_SPMR(obj->base_address), spmr | MSS);
+	}
+	else {
+		/* SCKn端子はクロック出力として使用 */
+		sil_wrb_mem(SCI_SCR(obj->base_address),
+			sil_reb_mem(SCI_SCR(obj->base_address)) & ~CKE);
+
+		/* 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));
+}
+
+void spi_frequency(spi_t *obj, int hz)
+{
+	uint8_t scr = sil_reb_mem(SCI_SCR(obj->base_address));
+
+	/* 送受信禁止, 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);
+}
+
+int spi_master_write(spi_t *obj, int value)
+{
+	/* TXI割り込み発生確認 */
+	while (!probe_int(obj->txi_intno))
+		;
+
+	/* 送信データをライト */
+	sil_wrb_mem(SCI_TDR(obj->base_address), (char)value);
+
+	do {
+		uint8_t ssr = sil_reb_mem(SCI_SSR(obj->base_address));
+		if ((ssr & ORER) != 0) {
+			ssr &= ~ORER;
+			sil_wrb_mem(SCI_SSR(obj->base_address), ssr);
+			return -1;
+		}
+	}
+	/* RXI割り込み発生確認 */
+	while (!probe_int(obj->rxi_intno));
+
+	/* 受信データをリード */
+	return sil_reb_mem(SCI_RDR(obj->base_address));
+}
+
+int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
+	char *rx_buffer, int rx_length, char write_fill)
+{
+	int total = (tx_length > rx_length) ? tx_length : rx_length;
+
+	for (int i = 0; i < total; i++) {
+		char out = (i < tx_length) ? tx_buffer[i] : write_fill;
+		char in = spi_master_write(obj, out);
+		if (i < rx_length) {
+			rx_buffer[i] = in;
+		}
+	}
+
+	return total;
+}
+
+uint8_t DecToBcd(uint8_t value)
+{
+	return ((value / 10) << 4) | (value % 10);
+}
+
+uint8_t BcdToDec(uint8_t value)
+{
+	return (10 * (value >> 4)) | (value & 0x0F);
+}
+
+void rtc_init(void)
+{
+}
+
+void rtc_free(void)
+{
+}
+
+int rtc_isenabled(void)
+{
+	return 1;
+}
+
+long long __tm_to_secs(const struct tm *tm);
+int __secs_to_tm(long long t, struct tm *tm);
+
+time_t rtc_read(void)
+{
+	struct tm tm = { 0 };
+	tm.tm_year = 2000 - 1900 + BcdToDec(sil_reb_mem((uint8_t *)RTC_RYRCNT_ADDR));
+	tm.tm_mon = BcdToDec(sil_reb_mem((uint8_t *)RTC_RMONCNT_ADDR)) - 1;
+	tm.tm_mday = BcdToDec(sil_reb_mem((uint8_t *)RTC_RDAYCNT_ADDR));
+	tm.tm_hour = BcdToDec(sil_reb_mem((uint8_t *)RTC_RHRCNT_ADDR));
+	tm.tm_min = BcdToDec(sil_reb_mem((uint8_t *)RTC_RMINCNT_ADDR));
+	tm.tm_sec = BcdToDec(sil_reb_mem((uint8_t *)RTC_RSECCNT_ADDR));
+	return __tm_to_secs(&tm);
+}
+
+void rtc_write(time_t t)
+{
+	struct tm tm;
+
+	__secs_to_tm(t, &tm);
+	sil_wrb_mem((uint8_t *)RTC_RYRCNT_ADDR, DecToBcd(tm.tm_year + 1900 - 2000));
+	sil_wrb_mem((uint8_t *)RTC_RMONCNT_ADDR, DecToBcd(tm.tm_mon + 1));
+	sil_wrb_mem((uint8_t *)RTC_RDAYCNT_ADDR, DecToBcd(tm.tm_mday));
+	sil_wrb_mem((uint8_t *)RTC_RHRCNT_ADDR, DecToBcd(tm.tm_hour));
+	sil_wrb_mem((uint8_t *)RTC_RMINCNT_ADDR, DecToBcd(tm.tm_min));
+	sil_wrb_mem((uint8_t *)RTC_RSECCNT_ADDR, DecToBcd(tm.tm_sec));
+}
+
+void sci_rxi_handler(uint32_t no)
+{
+	struct uart_irq_info_t *info = &sci_irq_info[no];
+	if (info->handler == NULL)
+		return;
+
+	info->handler(info->id, RxIrq);
+}
+
+void sci_txi_handler(uint32_t no)
+{
+/*	struct uart_irq_info_t *info = &sci_irq_info[no];
+	if (info->handler == NULL)
+		return;
+
+	info->handler(info->id, TxIrq);*/
+}
+
+void sci_tei_handler(int no)
+{
+	struct uart_irq_info_t *info = &sci_irq_info[no];
+	if (info->handler == NULL)
+		return;
+
+	info->handler(info->id, TxIrq);
+}
+
+void sci0_rxi_handler(void)
+{
+	sci_rxi_handler(0);
+}
+
+void sci0_txi_handler(void)
+{
+	sci_txi_handler(0);
+}
+
+void sci0_tei_handler(void)
+{
+	sci_tei_handler(0);
+}
+
+void sci1_rxi_handler(void)
+{
+	sci_rxi_handler(1);
+}
+
+void sci1_txi_handler(void)
+{
+	sci_txi_handler(1);
+}
+
+void sci1_tei_handler(void)
+{
+	sci_tei_handler(1);
+}
+
+void sci2_rxi_handler(void)
+{
+	sci_rxi_handler(2);
+}
+
+void sci2_txi_handler(void)
+{
+	sci_txi_handler(2);
+}
+
+void sci2_tei_handler(void)
+{
+	sci_tei_handler(2);
+}
+
+void sci3_rxi_handler(void)
+{
+	sci_rxi_handler(3);
+}
+
+void sci3_txi_handler(void)
+{
+	sci_txi_handler(3);
+}
+
+void sci3_tei_handler(void)
+{
+	sci_tei_handler(3);
+}
+
+void sci4_rxi_handler(void)
+{
+	sci_rxi_handler(4);
+}
+
+void sci4_txi_handler(void)
+{
+	sci_txi_handler(4);
+}
+
+void sci4_tei_handler(void)
+{
+	sci_tei_handler(4);
+}
+
+void sci5_rxi_handler(void)
+{
+	sci_rxi_handler(5);
+}
+
+void sci5_txi_handler(void)
+{
+	sci_txi_handler(5);
+}
+
+void sci5_tei_handler(void)
+{
+	sci_tei_handler(5);
+}
+
+void sci6_rxi_handler(void)
+{
+	sci_rxi_handler(6);
+}
+
+void sci6_txi_handler(void)
+{
+	sci_txi_handler(6);
+}
+
+void sci6_tei_handler(void)
+{
+	sci_tei_handler(6);
+}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/target/mbed_api.cfg
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/target/mbed_api.cfg	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/mbed/target/mbed_api.cfg	(revision 374)
@@ -0,0 +1,120 @@
+/*
+ *  TOPPERS ECHONET Lite Communication Middleware
+ * 
+ *  Copyright (C) 2018 Cores Co., Ltd. Japan
+ * 
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/*
+ *  gpio_apiのシステムコンフィギュレーションファイル
+ */
+#include "shellif.h"
+#include "gpio_api.h"
+
+/* CSI0 */
+
+DEF_INH(INT_SCI0_RXI, { TA_HLNG, sci0_rxi_handler });
+CFG_INT(INT_SCI0_RXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI0_TXI, { TA_HLNG, sci0_txi_handler });
+CFG_INT(INT_SCI0_TXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI0_TEI, { TA_HLNG, sci0_tei_handler });
+CFG_INT(INT_SCI0_TEI, { TA_NULL, -1 });
+
+/* CSI1 */
+
+DEF_INH(INT_SCI1_RXI, { TA_HLNG, sci1_rxi_handler });
+CFG_INT(INT_SCI1_RXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI1_TXI, { TA_HLNG, sci1_txi_handler });
+CFG_INT(INT_SCI1_TXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI1_TEI, { TA_HLNG, sci1_tei_handler });
+CFG_INT(INT_SCI1_TEI, { TA_NULL, -1 });
+
+/* CSI2 */
+
+DEF_INH(INT_SCI2_RXI, { TA_HLNG, sci2_rxi_handler });
+CFG_INT(INT_SCI2_RXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI2_TXI, { TA_HLNG, sci2_txi_handler });
+CFG_INT(INT_SCI2_TXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI2_TEI, { TA_HLNG, sci2_tei_handler });
+CFG_INT(INT_SCI2_TEI, { TA_NULL, -1 });
+
+/* CSI3 */
+
+DEF_INH(INT_SCI3_RXI, { TA_HLNG, sci3_rxi_handler });
+CFG_INT(INT_SCI3_RXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI3_TXI, { TA_HLNG, sci3_txi_handler });
+CFG_INT(INT_SCI3_TXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI3_TEI, { TA_HLNG, sci3_tei_handler });
+CFG_INT(INT_SCI3_TEI, { TA_NULL, -1 });
+
+/* CSI4 */
+
+DEF_INH(INT_SCI4_RXI, { TA_HLNG, sci4_rxi_handler });
+CFG_INT(INT_SCI4_RXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI4_TXI, { TA_HLNG, sci4_txi_handler });
+CFG_INT(INT_SCI4_TXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI4_TEI, { TA_HLNG, sci4_tei_handler });
+CFG_INT(INT_SCI4_TEI, { TA_NULL, -1 });
+
+/* CSI5 */
+
+DEF_INH(INT_SCI5_RXI, { TA_HLNG, sci5_rxi_handler });
+CFG_INT(INT_SCI5_RXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI5_TXI, { TA_HLNG, sci5_txi_handler });
+CFG_INT(INT_SCI5_TXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI5_TEI, { TA_HLNG, sci5_tei_handler });
+CFG_INT(INT_SCI5_TEI, { TA_NULL, -1 });
+
+/* CSI6 */
+
+DEF_INH(INT_SCI6_RXI, { TA_HLNG, sci6_rxi_handler });
+CFG_INT(INT_SCI6_RXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI6_TXI, { TA_HLNG, sci6_txi_handler });
+CFG_INT(INT_SCI6_TXI, { TA_NULL, -1 });
+
+DEF_INH(INT_SCI6_TEI, { TA_HLNG, sci6_tei_handler });
+CFG_INT(INT_SCI6_TEI, { TA_NULL, -1 });
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/Makefile.target
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/Makefile.target	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/Makefile.target	(revision 374)
@@ -13,5 +13,5 @@
 #  コンパイルオプション
 #
-INCLUDES := $(INCLUDES) -I$(TARGETDIR) -I$(SRCDIR)/pdic
+INCLUDES := $(INCLUDES) -I$(TARGETDIR) -I$(SRCDIR)/mbed
 
 #
@@ -25,5 +25,5 @@
 #  システムサービスに関する定義
 #
-SYSSVC_DIRS := $(SYSSVC_DIRS)
+SYSSVC_DIRS := $(SYSSVC_DIRS) $(SRCDIR)/mbed
 SYSSVC_COBJS := $(SYSSVC_COBJS)
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/PinNames.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/PinNames.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/PinNames.h	(revision 374)
@@ -0,0 +1,74 @@
+#ifndef MBED_PINNAMES_H
+#define MBED_PINNAMES_H
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+	P05, P20, P21, P32, P33, P50, P52, PC0, PC1, PC2, PC4, PC5, PC6, PC7, 
+	PA0, PA1, PA2, PA6, PA7,
+	AN0, AN1, AN2, AN3, AN4, AN5, AN6, AN7,
+
+	D0 = P20,
+	D1 = P21,
+	D2 = PC0,
+	D3 = PC1,
+	D4 = PC2,
+	D5 = P50,
+	D6 = P52,
+	D7 = P32,
+	D8 = P33,
+	D9 = P05,
+	D10 = PC4,
+	D11 = PC6,
+	D12 = PC7,
+	D13 = PC5,
+
+	A0 = AN0,
+	A1 = AN1,
+	A2 = AN2,
+	A3 = AN3,
+	A4 = AN4,
+	A5 = AN5,
+	A6 = AN6,
+	A7 = AN7,
+
+	I2C_SCL = P52,
+	I2C_SDA = P50,
+
+	PIN_LED0 = PA0,
+	PIN_LED1 = PA1,
+	PIN_LED2 = PA2,
+	PIN_LED3 = PA6,
+	PIN_SW = PA7,
+
+	NC = (int)0xFFFFFFFF
+} PinName;
+
+#define LED_RED			PIN_LED0
+#define LED_GREEN		PIN_LED1
+#define LED_BLUE		PIN_LED2
+#define LED_USER		PIN_LED3
+#define USER_BUTTON0	PIN_SW
+
+typedef enum {
+	PIN_INPUT,
+	PIN_OUTPUT
+} PinDirection;
+
+typedef enum {
+	PullUp = 2,
+	PullDown = 3,
+	PullNone = 0,
+	OpenDrain = 4,
+	PullDefault = PullNone
+} PinMode;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/gr_citrus.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/gr_citrus.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/gr_citrus.h	(revision 374)
@@ -71,10 +71,5 @@
  *  ボーレート設定
  */
-#define BAUD_19200BPS		UINT_C( 78 )
-#define BAUD_38400BPS		UINT_C( 39 )
-#define BAUD_57600BPS		UINT_C( 25 )
-#define BAUD_115200BPS		UINT_C( 12 )
-
-#define UART_BAUDRATE		BAUD_115200BPS
+#define UART_BAUDRATE		115200
 
 /*
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrus.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrus.cdl	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrus.cdl	(revision 374)
@@ -51,10 +51,10 @@
  */
 import_C("gr_citrus.h");
-import_C("rx630.h");
+import_C("device.h");
 
 /*
  *  FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドライバ
  */
-import("tSCIF.cdl");
+import("tMbedSerial.cdl");
 
 /*
@@ -74,10 +74,4 @@
 	call			sSIOPort	cSIOPort;
 	[inline] entry	siSIOCBR	eiSIOCBR;
-
-	/*
-	 *  割込み要求ライン操作のための結合
-	 */
-	call	sInterruptRequest	cRxInterruptRequest;
-	call	sInterruptRequest	cTxInterruptRequest;
 };
 
@@ -86,5 +80,4 @@
  *  ト）のセルタイプ
  */
-[active]
 composite tSIOPortGRCitrus {
 	/*
@@ -98,9 +91,6 @@
 	 */
 	attr {
-		uintptr_t	baseAddress;				/* ベースアドレス */
-		INTNO		rxInterruptNumber;			/* 受信割込み番号 */
-		INTNO		txInterruptNumber;			/* 送信割込み番号 */
-		PRI			isrPriority = 1;			/* ISR優先度 */
-		PRI			interruptPriority = -4;		/* 割込み優先度 */
+		int32_t tx;								/* 送信Pin */
+		int32_t rx;								/* 受信Pin */
 		uint32_t	baudRate = 115200;			/* ボーレートの設定値 */
 	};
@@ -109,6 +99,7 @@
 	 *  SIOドライバ
 	 */
-	cell tSCIF SCIF {
-		baseAddress = composite.baseAddress;
+	cell tMbedSerial MbedSerial {
+		tx          = composite.tx;
+		rx          = composite.rx;
 		baudRate    = composite.baudRate;
 		ciSIOCBR    = SIOPortMain.eiSIOCBR;
@@ -120,35 +111,7 @@
 	cell tSIOPortGRCitrusMain SIOPortMain {
 		ciSIOCBR            => composite.ciSIOCBR;
-		cSIOPort            = SCIF.eSIOPort;
-		cRxInterruptRequest = RxInterruptRequest.eInterruptRequest;
-		cTxInterruptRequest = TxInterruptRequest.eInterruptRequest;
+		cSIOPort            = MbedSerial.eSIOPort;
 	};
 	composite.eSIOPort => SIOPortMain.eSIOPort;
-
-	/*
-	 *  SIOの受信割込みサービスルーチンと割込み要求ライン
-	 */
-	cell tISR RxISRInstance {
-		interruptNumber = composite.rxInterruptNumber;
-		isrPriority     = composite.isrPriority;
-		ciISRBody       = SCIF.eiRxISR;
-	};
-	cell tInterruptRequest RxInterruptRequest {
-		interruptNumber   = composite.rxInterruptNumber;
-		interruptPriority = composite.interruptPriority;
-	};
-
-	/*
-	 *  SIOの受信割込みサービスルーチンと割込み要求ライン
-	 */
-	cell tISR TxISRInstance {
-		interruptNumber = composite.txInterruptNumber;
-		isrPriority     = composite.isrPriority;
-		ciISRBody       = SCIF.eiTxISR;
-	};
-	cell tInterruptRequest TxInterruptRequest {
-		interruptNumber   = composite.txInterruptNumber;
-		interruptPriority = composite.interruptPriority;
-	};
 };
 
@@ -158,13 +121,12 @@
  *  サンプルプログラムが使うポートが，SIOPortTarget1に固定されているた
  *  め，ポート1とポート3を入れ換えている．具体的には，SIOPortTarget1は
- *  SCIFのチャネル2（チャネル番号は0から始まるので，ポート3のこと）に，
- *  SIOPortTarget3はSCIFのチャネル0につながっている．
+ *  MbedSerialのチャネル2（チャネル番号は0から始まるので，ポート3のこと）に，
+ *  SIOPortTarget3はMbedSerialのチャネル0につながっている．
  */
 [prototype]
 cell tSIOPortGRCitrus SIOPortTarget1 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI0_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI0_RXI");
-	txInterruptNumber = C_EXP("INT_SCI0_TEI");
+	tx = C_EXP("P20");		/* PIN_IO0 */
+	rx = C_EXP("P21");		/* PIN_IO1 */
 };
 
@@ -172,7 +134,6 @@
 cell tSIOPortGRCitrus SIOPortTarget2 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI1_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI1_RXI");
-	txInterruptNumber = C_EXP("INT_SCI1_TEI");
+	tx = C_EXP("P50");		/* PIN_IO5 */
+	rx = C_EXP("P52");		/* PIN_IO6 */
 };
 
@@ -180,7 +141,6 @@
 cell tSIOPortGRCitrus SIOPortTarget3 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI2_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI2_RXI");
-	txInterruptNumber = C_EXP("INT_SCI2_TEI");
+	tx = C_EXP("P32");		/* PIN_IO7 */
+	rx = C_EXP("P33");		/* PIN_IO8 */
 };
 
@@ -188,7 +148,6 @@
 cell tSIOPortGRCitrus SIOPortTarget4 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI3_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI3_RXI");
-	txInterruptNumber = C_EXP("INT_SCI3_TEI");
+	tx = C_EXP("PC7");		/* PIN_IO12 */
+	rx = C_EXP("PC6");		/* PIN_IO11 */
 };
 
@@ -196,7 +155,6 @@
 cell tSIOPortGRCitrus SIOPortTarget5 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI4_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI4_RXI");
-	txInterruptNumber = C_EXP("INT_SCI4_TEI");
+	tx = C_EXP("P26");		/* PIN_IO26 */
+	rx = C_EXP("P30");		/* PIN_IO22 */
 };
 
@@ -204,7 +162,6 @@
 cell tSIOPortGRCitrus SIOPortTarget6 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI5_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI5_RXI");
-	txInterruptNumber = C_EXP("INT_SCI5_TEI");
+	tx = C_EXP("PB5");		/* PIN_IO29 */
+	rx = C_EXP("P25");		/* PIN_IO23 */
 };
 
@@ -212,7 +169,6 @@
 cell tSIOPortGRCitrus SIOPortTarget7 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI6_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI6_RXI");
-	txInterruptNumber = C_EXP("INT_SCI6_TEI");
+	tx = C_EXP("PA0");		/* PIN_IO33 */
+	rx = C_EXP("PC2");		/* PIN_IO4 */
 };
 
@@ -220,6 +176,5 @@
 cell tSIOPortGRCitrus SIOPortTarget8 {
 	/* 属性の設定 */
-	baseAddress       = NULL;
-	rxInterruptNumber = NULL;
-	txInterruptNumber = NULL;
+	rx = NULL;
+	tx = NULL;
 };
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrusMain_inline.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrusMain_inline.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrusMain_inline.h	(revision 374)
@@ -57,10 +57,4 @@
 	 */
 	cSIOPort_open();
-
-	/*
-	 *  SIOの割込みマスクを解除する．
-	 */
-	cRxInterruptRequest_enable();
-	cTxInterruptRequest_enable();
 }
 
@@ -77,10 +71,4 @@
 	 */
 	cSIOPort_close();
-
-	/*
-	 *  SIOの割込みをマスクする．
-	 */
-	cRxInterruptRequest_disable();
-	cTxInterruptRequest_disable();
 }
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel_impl.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel_impl.c	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel_impl.c	(revision 374)
@@ -53,5 +53,9 @@
 #include "syssvc/serial.h"
 #ifdef TOPPERS_OMIT_TECS
-#include "rx630_uart.h"
+#include "serial_api.h"
+#endif
+
+#ifdef TOPPERS_OMIT_TECS
+serial_t log_serial;
 #endif
 
@@ -75,18 +79,12 @@
 		sil_reb_mem(PORTA_PDR_ADDR) & ~PORT_PDR_B7_BIT);
 
+#ifdef TOPPERS_OMIT_TECS
 	/*
 	 *  シリアルポートの設定
 	 */
-
-	/* ポートP20をTxD0, ポートP21をRxD0に */
-	sil_wrb_mem(PORT2_PMR_ADDR, 0x03);
-
-	/* データディレクションレジスタ(PDR)の設定 P21(RxD0)を入力ポートにする */
-	sil_wrb_mem(PORT2_PDR_ADDR, 
-		sil_reb_mem(PORT2_PDR_ADDR) & ~PORT_PDR_B1_BIT);
-
-	/* データディレクションレジスタ(PDR)の設定 P20(TxD0)を出力ポートにする */
-	sil_wrb_mem(PORT2_PDR_ADDR, 
-		sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B0_BIT);
+	serial_init(&log_serial, P20, P21);
+	serial_baud(&log_serial, UART_BAUDRATE);
+	serial_format(&log_serial, 8, ParityNone, 1);
+#endif
 
 	/* ポートP40～P47を周辺機器に */
@@ -149,8 +147,8 @@
 {
 	if (c == '\n') {
-		rx630_uart_pol_putc('\r', TARGET_PUTC_PORTID);
+		serial_putc(&log_serial, '\r');
 	}
 
-	rx630_uart_pol_putc(c, TARGET_PUTC_PORTID);
+	serial_putc(&log_serial, c);
 }
 #endif
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.c	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.c	(revision 374)
@@ -3,5 +3,5 @@
  *      Toyohashi Open Platform for Embedded Real-Time Systems/
  *      Advanced Standard Profile Kernel
- * 
+ *
  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
  *                              Toyohashi Univ. of Technology, JAPAN
@@ -12,5 +12,5 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  *  Copyright (C) 2013      by Mitsuhiro Matsuura
- * 
+ *
  *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
  *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
@@ -35,5 +35,5 @@
  *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
  *      免責すること．
- * 
+ *
  *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
  *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
@@ -41,5 +41,5 @@
  *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
  *  の責任を負わない．
- * 
+ *
  *  @(#) $Id$
  */
@@ -51,4 +51,62 @@
 #include <sil.h>
 #include "target_serial.h"
+#include "hal/serial_api.h"
+#include "target_syssvc.h"
+#include "syssvc/serial.h"
+
+/*
+ *  シリアルI/Oポート初期化ブロックの定義
+ */
+typedef struct sio_port_initialization_block {
+	PinName tx;
+	PinName rx;
+} SIOPINIB;
+
+/*
+ *  シリアルI/Oポート管理ブロックの定義
+ */
+struct sio_port_control_block {
+	const SIOPINIB *p_siopinib;
+	intptr_t exinf;
+	bool_t openflag;
+	serial_t serial;
+};
+
+/*
+ *  シリアルI/Oポート管理ブロックのエリア
+ */
+SIOPCB siopcb_table[TNUM_PORT];
+
+static const SIOPINIB siopinib_table[TNUM_SIOP] =
+{
+	{ P20, P21 },
+#if TNUM_SIOP > 1
+	{ P50, P52 },
+#endif
+#if TNUM_SIOP > 2
+	{ P32, P33 },
+#endif
+#if TNUM_SIOP > 3
+	{ PC7, PC6 },
+#endif
+#if TNUM_SIOP > 4
+	{ P26, P30 },
+#endif
+#if TNUM_SIOP > 5
+	{ PB5, P25 },
+#endif
+#if TNUM_SIOP > 6
+	{ PA0, PC2 },
+#endif
+};
+
+/*
+ *  シリアルI/OポートIDから管理ブロックを取り出すためのマクロ
+ */
+#define INDEX_SIOP(siopid)	 ((uint_t)((siopid) - 1))
+#define get_siopcb(siopid)	 (&(siopcb_table[INDEX_SIOP(siopid)]))
+#define get_siopinib(siopid) (&(siopinib_table[INDEX_SIOP(siopid)]))
+
+static void mbed_serial_irq_handler(uint32_t id, SerialIrq event);
 
 /*
@@ -58,5 +116,14 @@
 sio_initialize(intptr_t exinf)
 {
-	rx630_uart_initialize();
+	SIOPCB	*p_siopcb;
+	uint_t	i;
+
+	/*
+	 *  シリアルI/Oポート管理ブロックの初期化
+	 */
+	for (p_siopcb = siopcb_table, i = 0; i < TNUM_SIOP; p_siopcb++, i++) {
+		p_siopcb->p_siopinib = &(siopinib_table[i]);
+		p_siopcb->openflag = false;
+	}
 }
 
@@ -69,31 +136,23 @@
 	SIOPCB  *p_siopcb = NULL;
 	ER      ercd;
-	INTNO	intno_sio_tx, intno_sio_rx;
-	
-	/*
-	 *  シリアルI/O割込みをマスクする．
-	 *  (dis_int関数は、"\kernel\interrupt.c"に記述)
-	 */
-	p_siopcb = rx630_uart_get_siopcb(siopid);
-	intno_sio_tx = rx630_uart_intno_tx(p_siopcb);
-	intno_sio_rx = rx630_uart_intno_rx(p_siopcb);
-	ercd = dis_int(intno_sio_tx);
-	assert(ercd == E_OK);
-	ercd = dis_int(intno_sio_rx);
-	assert(ercd == E_OK);
-	
-	p_siopcb = 
-		rx630_uart_opn_por(siopid , exinf , UART_BAUDRATE , UART_CLKSRC);
-
-	/*
-	 *  シリアルI/O割込みをマスク解除する．
-	 *  (ena_int関数は、"\kernel\interrupt.c"に記述)
-	 */
-	ercd = ena_int(intno_sio_tx);
-	assert(ercd == E_OK);
-	ercd = ena_int(intno_sio_rx);
-	assert(ercd == E_OK);
-
-	return(p_siopcb);
+	serial_t *serial;
+
+	if ((siopid <= 0) || (siopid > (sizeof(siopcb_table) / sizeof(siopcb_table[0]))))
+		return NULL;
+	p_siopcb = get_siopcb(siopid);
+
+	if (p_siopcb->openflag)
+		return NULL;
+	p_siopcb->openflag = true;
+	p_siopcb->exinf = exinf;
+
+	serial = &p_siopcb->serial;
+	serial_init(serial, p_siopcb->p_siopinib->tx, p_siopcb->p_siopinib->rx);
+	serial_baud(serial, UART_BAUDRATE);
+	serial_format(serial, 8, ParityNone, 1);
+
+	serial_irq_handler(serial, mbed_serial_irq_handler, siopid);
+
+	return p_siopcb;
 }
 
@@ -105,20 +164,90 @@
 {
 	ER        ercd;
-	INTNO	intno_sio_tx, intno_sio_rx;
+	serial_t *serial = &p_siopcb->serial;
 
 	/*
 	 *  デバイス依存のクローズ処理．
 	 */
-	rx630_uart_cls_por(p_siopcb);
-	
-	/*
-	 *  シリアルI/O割込みをマスクする．
-	 */
-	intno_sio_tx = rx630_uart_intno_tx(p_siopcb);
-	intno_sio_rx = rx630_uart_intno_rx(p_siopcb);
-	ercd = dis_int(intno_sio_tx);
-	assert(ercd == E_OK);
-	ercd = dis_int(intno_sio_rx);
-	assert(ercd == E_OK);
+	serial_free(serial);
+	p_siopcb->openflag = false;
+}
+
+/*
+ *  シリアルI/Oポートへの文字送信
+ */
+bool_t
+sio_snd_chr(SIOPCB *p_siopcb, char c)
+{
+	serial_t *serial = &p_siopcb->serial;
+	if (!serial_writable(serial))
+		return false;
+	serial_putc(serial, c);
+	return true;
+}
+
+/*
+ *  シリアルI/Oポートからの文字受信
+ */
+int_t
+sio_rcv_chr(SIOPCB *p_siopcb)
+{
+	serial_t *serial = &p_siopcb->serial;
+	if (!serial_readable(serial))
+		return -1;
+	return serial_getc(serial);
+}
+
+/*
+ *  シリアルI/Oポートからのコールバックの許可
+ */
+void
+sio_ena_cbr(SIOPCB *p_siopcb, uint_t cbrtn)
+{
+	serial_t *serial = &p_siopcb->serial;
+	switch (cbrtn) {
+	case SIO_RDY_SND:
+		serial_irq_set(serial, TxIrq, true);
+		break;
+	case SIO_RDY_RCV:
+		serial_irq_set(serial, RxIrq, true);
+		break;
+	}
+}
+
+/*
+ *  シリアルI/Oポートからのコールバックの禁止
+ */
+void
+sio_dis_cbr(SIOPCB *p_siopcb, uint_t cbrtn)
+{
+	serial_t *serial = &p_siopcb->serial;
+	switch (cbrtn) {
+	case SIO_RDY_SND:
+		serial_irq_set(serial, TxIrq, false);
+		break;
+	case SIO_RDY_RCV:
+		serial_irq_set(serial, RxIrq, false);
+		break;
+	}
+}
+
+/*
+ *  シリアルI/Oポートからの送信可能コールバック
+ */
+void
+serial_irdy_snd(SIOPCB  *p_siopcb)
+{
+	/* 共通部（syssvc\serial.c）にあるsio_irdy_snd関数を呼び出し*/
+	sio_irdy_snd(p_siopcb->exinf);
+}
+
+/*
+ *  シリアルI/Oポートからの受信通知コールバック
+ */
+void
+serial_irdy_rcv(SIOPCB  *p_siopcb)
+{
+	/* 共通部（syssvc\serial.c）にあるsio_irdy_rcv関数を呼び出し*/
+	sio_irdy_rcv(p_siopcb->exinf);
 }
 
@@ -126,71 +255,23 @@
  *  SIOの割込みハンドラ
  */
-void sio_tx_isr(intptr_t exinf)
-{
-	rx630_uart_tx_isr(exinf);
-}
-
-/*
- *  SIOの割込みハンドラ
- */
-void sio_rx_isr(intptr_t exinf)
-{
-	rx630_uart_rx_isr(exinf);
-}
-
-/*
- *  シリアルI/Oポートへの文字送信
- */
-bool_t
-sio_snd_chr(SIOPCB *siopcb, char c)
-{
-	return(rx630_uart_snd_chr(siopcb, c));
-}
-
-/*
- *  シリアルI/Oポートからの文字受信
- */
-int_t
-sio_rcv_chr(SIOPCB *siopcb)
-{
-	return(rx630_uart_rcv_chr(siopcb));
-}
-
-/*
- *  シリアルI/Oポートからのコールバックの許可
- */
-void
-sio_ena_cbr(SIOPCB *siopcb, uint_t cbrtn)
-{
-	rx630_uart_ena_cbr(siopcb, cbrtn);
-}
-
-/*
- *  シリアルI/Oポートからのコールバックの禁止
- */
-void
-sio_dis_cbr(SIOPCB *siopcb, uint_t cbrtn)
-{
-	rx630_uart_dis_cbr(siopcb, cbrtn);
-}
-
-/*
- *  シリアルI/Oポートからの送信可能コールバック
- */
-void
-rx630_uart_irdy_snd(intptr_t exinf)
-{
-	/* 共通部（syssvc\serial.c）にあるsio_irdy_snd関数を呼び出し*/
-	sio_irdy_snd(exinf);
-}
-
-/*
- *  シリアルI/Oポートからの受信通知コールバック
- */
-void
-rx630_uart_irdy_rcv(intptr_t exinf)
-{
-	/* 共通部（syssvc\serial.c）にあるsio_irdy_rcv関数を呼び出し*/
-	sio_irdy_rcv(exinf);
-}
-
+void
+mbed_serial_irq_handler(uint32_t siopid, SerialIrq event)
+{
+	SIOPCB  *p_siopcb;
+
+	if ((siopid <= 0) || (siopid > (sizeof(siopcb_table) / sizeof(siopcb_table[0]))))
+		return;
+	p_siopcb = get_siopcb(siopid);
+
+	if (!p_siopcb->openflag)
+		return;
+
+	switch (event) {
+	case TxIrq:
+		serial_irdy_snd(p_siopcb);
+		break;
+	case RxIrq:
+		serial_irdy_rcv(p_siopcb);
+		break;
+	}
+}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.cfg
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.cfg	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.cfg	(revision 374)
@@ -4,8 +4,5 @@
 
 #include <target_serial.h>
+
 ATT_INI({ TA_NULL, 0, sio_initialize });
-CFG_INT(INTNO_SIO_TX, { INTATR_SIO, INTPRI_SIO });
-CFG_INT(INTNO_SIO_RX, { INTATR_SIO, INTPRI_SIO });
 
-CRE_ISR(INTNO_SIO_TX_ISR, {TA_NULL, SIO_PORTID, INTNO_SIO_TX, sio_tx_isr, 1});
-CRE_ISR(INTNO_SIO_RX_ISR, {TA_NULL, SIO_PORTID, INTNO_SIO_RX, sio_rx_isr, 1});
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.h	(revision 374)
@@ -53,18 +53,12 @@
 
 #include "gr_citrus.h"
-#include "rx630_uart.h"
+#include "serial_api.h"
 
-/*
- *  SIOの割込みハンドラのベクタ番号
- */
-#define INHNO_SIO_TX	INT_SCI1_TEI			/* 割込みハンドラ番号 */
-#define INTNO_SIO_TX	INT_SCI1_TEI			/* 割込み番号 */
-#define INHNO_SIO_RX	INT_SCI1_RXI			/* 割込みハンドラ番号 */
-#define INTNO_SIO_RX	INT_SCI1_RXI			/* 割込み番号 */
-#define INTPRI_SIO		-4						/* 割込み優先度 */
-#define INTATR_SIO		(TA_NULL)				/* 割込み属性 */
+#define SIO_RDY_SND 1
+#define SIO_RDY_RCV 2
 
 #ifndef TOPPERS_MACRO_ONLY
 
+typedef struct sio_port_control_block SIOPCB;
 
 /*
@@ -82,10 +76,4 @@
  */
 extern void		sio_cls_por(SIOPCB *p_siopcb);
-
-/*
- *  SIOの割込みハンドラ
- */
-extern void 	sio_tx_isr(intptr_t exinf);
-extern void 	sio_rx_isr(intptr_t exinf);
 
 /*
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_syssvc.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_syssvc.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_citrus_gcc/target_syssvc.h	(revision 374)
@@ -113,4 +113,10 @@
 
 /*
+ *  使用するシリアルポートのPinName
+ */
+#define STDIO_UART_TX P20
+#define STDIO_UART_RX P21
+
+/*
  *  システムログタスク関連の定数の定義
  *
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/Makefile.target
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/Makefile.target	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/Makefile.target	(revision 374)
@@ -13,5 +13,5 @@
 #  コンパイルオプション
 #
-INCLUDES := $(INCLUDES) -I$(TARGETDIR) -I$(SRCDIR)/pdic
+INCLUDES := $(INCLUDES) -I$(TARGETDIR) -I$(SRCDIR)/mbed
 
 #
@@ -25,5 +25,5 @@
 #  システムサービスに関する定義
 #
-SYSSVC_DIRS := $(SYSSVC_DIRS)
+SYSSVC_DIRS := $(SYSSVC_DIRS) $(SRCDIR)/mbed
 SYSSVC_COBJS := $(SYSSVC_COBJS)
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/PinNames.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/PinNames.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/PinNames.h	(revision 374)
@@ -0,0 +1,74 @@
+#ifndef MBED_PINNAMES_H
+#define MBED_PINNAMES_H
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+	P20, P21, P22, P23, P24, P25, P32, P33, PC2, PC3, PC4, PC5, PC6, PC7,
+	P50, P52, PA0, PA1, PA2, PA6, PA7,
+	AN0, AN1, AN2, AN3, AN4, AN5, AN6, AN7,
+
+	D0 = P21,
+	D1 = P20,
+	D2 = P22,
+	D3 = P23,
+	D4 = P24,
+	D5 = P25,
+	D6 = P32,
+	D7 = P33,
+	D8 = PC2,
+	D9 = PC3,
+	D10 = PC4,
+	D11 = PC6,
+	D12 = PC7,
+	D13 = PC5,
+
+	A0 = AN0,
+	A1 = AN1,
+	A2 = AN2,
+	A3 = AN3,
+	A4 = AN4,
+	A5 = AN5,
+	A6 = AN6,
+	A7 = AN7,
+
+	I2C_SCL = P52,
+	I2C_SDA = P50,
+
+	PIN_LED0 = PA0,
+	PIN_LED1 = PA1,
+	PIN_LED2 = PA2,
+	PIN_LED3 = PA6,
+	PIN_SW = PA7,
+
+	NC = (int)0xFFFFFFFF
+} PinName;
+
+#define LED_RED			PIN_LED0
+#define LED_GREEN		PIN_LED1
+#define LED_BLUE		PIN_LED2
+#define LED_USER		PIN_LED3
+#define USER_BUTTON0	PIN_SW
+
+typedef enum {
+	PIN_INPUT,
+	PIN_OUTPUT
+} PinDirection;
+
+typedef enum {
+	PullUp = 2,
+	PullDown = 3,
+	PullNone = 0,
+	OpenDrain = 4,
+	PullDefault = PullNone
+} PinMode;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/gr_sakura.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/gr_sakura.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/gr_sakura.h	(revision 374)
@@ -71,10 +71,5 @@
  *  ボーレート設定
  */
-#define BAUD_19200BPS		UINT_C( 78 )
-#define BAUD_38400BPS		UINT_C( 39 )
-#define BAUD_57600BPS		UINT_C( 25 )
-#define BAUD_115200BPS		UINT_C( 12 )
-
-#define UART_BAUDRATE		BAUD_115200BPS
+#define UART_BAUDRATE		115200
 
 /*
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakura.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakura.cdl	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakura.cdl	(revision 374)
@@ -51,10 +51,10 @@
  */
 import_C("gr_sakura.h");
-import_C("rx630.h");
+import_C("device.h");
 
 /*
  *  FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドライバ
  */
-import("tSCIF.cdl");
+import("tMbedSerial.cdl");
 
 /*
@@ -74,10 +74,4 @@
 	call			sSIOPort	cSIOPort;
 	[inline] entry	siSIOCBR	eiSIOCBR;
-
-	/*
-	 *  割込み要求ライン操作のための結合
-	 */
-	call	sInterruptRequest	cRxInterruptRequest;
-	call	sInterruptRequest	cTxInterruptRequest;
 };
 
@@ -86,5 +80,4 @@
  *  ト）のセルタイプ
  */
-[active]
 composite tSIOPortGRSakura {
 	/*
@@ -98,9 +91,6 @@
 	 */
 	attr {
-		uintptr_t	baseAddress;				/* ベースアドレス */
-		INTNO		rxInterruptNumber;			/* 受信割込み番号 */
-		INTNO		txInterruptNumber;			/* 送信割込み番号 */
-		PRI			isrPriority = 1;			/* ISR優先度 */
-		PRI			interruptPriority = -4;		/* 割込み優先度 */
+		int32_t tx;								/* 送信Pin */
+		int32_t rx;								/* 受信Pin */
 		uint32_t	baudRate = 115200;			/* ボーレートの設定値 */
 	};
@@ -109,6 +99,7 @@
 	 *  SIOドライバ
 	 */
-	cell tSCIF SCIF {
-		baseAddress = composite.baseAddress;
+	cell tMbedSerial MbedSerial {
+		tx          = composite.tx;
+		rx          = composite.rx;
 		baudRate    = composite.baudRate;
 		ciSIOCBR    = SIOPortMain.eiSIOCBR;
@@ -120,35 +111,7 @@
 	cell tSIOPortGRSakuraMain SIOPortMain {
 		ciSIOCBR            => composite.ciSIOCBR;
-		cSIOPort            = SCIF.eSIOPort;
-		cRxInterruptRequest = RxInterruptRequest.eInterruptRequest;
-		cTxInterruptRequest = TxInterruptRequest.eInterruptRequest;
+		cSIOPort            = MbedSerial.eSIOPort;
 	};
 	composite.eSIOPort => SIOPortMain.eSIOPort;
-
-	/*
-	 *  SIOの受信割込みサービスルーチンと割込み要求ライン
-	 */
-	cell tISR RxISRInstance {
-		interruptNumber = composite.rxInterruptNumber;
-		isrPriority     = composite.isrPriority;
-		ciISRBody       = SCIF.eiRxISR;
-	};
-	cell tInterruptRequest RxInterruptRequest {
-		interruptNumber   = composite.rxInterruptNumber;
-		interruptPriority = composite.interruptPriority;
-	};
-
-	/*
-	 *  SIOの受信割込みサービスルーチンと割込み要求ライン
-	 */
-	cell tISR TxISRInstance {
-		interruptNumber = composite.txInterruptNumber;
-		isrPriority     = composite.isrPriority;
-		ciISRBody       = SCIF.eiTxISR;
-	};
-	cell tInterruptRequest TxInterruptRequest {
-		interruptNumber   = composite.txInterruptNumber;
-		interruptPriority = composite.interruptPriority;
-	};
 };
 
@@ -158,13 +121,12 @@
  *  サンプルプログラムが使うポートが，SIOPortTarget1に固定されているた
  *  め，ポート1とポート3を入れ換えている．具体的には，SIOPortTarget1は
- *  SCIFのチャネル2（チャネル番号は0から始まるので，ポート3のこと）に，
- *  SIOPortTarget3はSCIFのチャネル0につながっている．
+ *  MbedSerialのチャネル2（チャネル番号は0から始まるので，ポート3のこと）に，
+ *  SIOPortTarget3はMbedSerialのチャネル0につながっている．
  */
 [prototype]
 cell tSIOPortGRSakura SIOPortTarget1 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI0_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI0_RXI");
-	txInterruptNumber = C_EXP("INT_SCI0_TEI");
+	tx = C_EXP("P20");		/* PIN_IO1 */
+	rx = C_EXP("P21");		/* PIN_IO0 */
 };
 
@@ -172,7 +134,6 @@
 cell tSIOPortGRSakura SIOPortTarget2 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI1_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI1_RXI");
-	txInterruptNumber = C_EXP("INT_SCI1_TEI");
+	tx = C_EXP("P32");		/* PIN_IO6 */
+	rx = C_EXP("P33");		/* PIN_IO7 */
 };
 
@@ -180,7 +141,6 @@
 cell tSIOPortGRSakura SIOPortTarget3 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI2_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI2_RXI");
-	txInterruptNumber = C_EXP("INT_SCI2_TEI");
+	tx = C_EXP("P50");		/* PIN_IO24 */
+	rx = C_EXP("P52");		/* PIN_IO26 */
 };
 
@@ -188,7 +148,6 @@
 cell tSIOPortGRSakura SIOPortTarget4 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI3_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI3_RXI");
-	txInterruptNumber = C_EXP("INT_SCI3_TEI");
+	tx = C_EXP("P23");		/* PIN_IO3 */
+	rx = C_EXP("P25");		/* PIN_IO5 */
 };
 
@@ -196,7 +155,6 @@
 cell tSIOPortGRSakura SIOPortTarget5 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI4_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI4_RXI");
-	txInterruptNumber = C_EXP("INT_SCI4_TEI");
+	tx = C_EXP("PC3");		/* PIN_IO9 */
+	rx = C_EXP("PC2");		/* PIN_IO8 */
 };
 
@@ -204,7 +162,6 @@
 cell tSIOPortGRSakura SIOPortTarget6 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI5_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI5_RXI");
-	txInterruptNumber = C_EXP("INT_SCI5_TEI");
+	tx = C_EXP("PC7");		/* PIN_IO12 */
+	rx = C_EXP("PC6");		/* PIN_IO11 */
 };
 
@@ -212,7 +169,6 @@
 cell tSIOPortGRSakura SIOPortTarget7 {
 	/* 属性の設定 */
-	baseAddress       = C_EXP("SCI6_BASE");
-	rxInterruptNumber = C_EXP("INT_SCI6_RXI");
-	txInterruptNumber = C_EXP("INT_SCI6_TEI");
+	tx = C_EXP("P26");		/* PIN_IO58 */
+	rx = C_EXP("P30");		/* PIN_IO60 */
 };
 
@@ -220,6 +176,5 @@
 cell tSIOPortGRSakura SIOPortTarget8 {
 	/* 属性の設定 */
-	baseAddress       = NULL;
-	rxInterruptNumber = NULL;
-	txInterruptNumber = NULL;
+	tx = NULL;
+	rx = NULL;
 };
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakuraMain_inline.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakuraMain_inline.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakuraMain_inline.h	(revision 374)
@@ -57,10 +57,4 @@
 	 */
 	cSIOPort_open();
-
-	/*
-	 *  SIOの割込みマスクを解除する．
-	 */
-	cRxInterruptRequest_enable();
-	cTxInterruptRequest_enable();
 }
 
@@ -77,10 +71,4 @@
 	 */
 	cSIOPort_close();
-
-	/*
-	 *  SIOの割込みをマスクする．
-	 */
-	cRxInterruptRequest_disable();
-	cTxInterruptRequest_disable();
 }
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel_impl.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel_impl.c	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel_impl.c	(revision 374)
@@ -53,5 +53,9 @@
 #include "syssvc/serial.h"
 #ifdef TOPPERS_OMIT_TECS
-#include "rx630_uart.h"
+#include "serial_api.h"
+#endif
+
+#ifdef TOPPERS_OMIT_TECS
+serial_t log_serial;
 #endif
 
@@ -78,18 +82,12 @@
 		sil_reb_mem(PORTA_PDR_ADDR) & ~PORT_PDR_B7_BIT);
 
+#ifdef TOPPERS_OMIT_TECS
 	/*
 	 *  シリアルポートの設定
 	 */
-
-	/* ポートP20をTxD0, ポートP21をRxD0に */
-	sil_wrb_mem(PORT2_PMR_ADDR, 0x03);
-
-	/* データディレクションレジスタ(PDR)の設定 P21(RxD0)を入力ポートにする */
-	sil_wrb_mem(PORT2_PDR_ADDR, 
-		sil_reb_mem(PORT2_PDR_ADDR) & ~PORT_PDR_B1_BIT);
-
-	/* データディレクションレジスタ(PDR)の設定 P20(TxD0)を出力ポートにする */
-	sil_wrb_mem(PORT2_PDR_ADDR, 
-		sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B0_BIT);
+	serial_init(&log_serial, P20, P21);
+	serial_baud(&log_serial, UART_BAUDRATE);
+	serial_format(&log_serial, 8, ParityNone, 1);
+#endif
 
 	/* ポートP40～P47を周辺機器に */
@@ -152,8 +150,8 @@
 {
 	if (c == '\n') {
-		rx630_uart_pol_putc('\r', TARGET_PUTC_PORTID);
+		serial_putc(&log_serial, '\r');
 	}
 
-	rx630_uart_pol_putc(c, TARGET_PUTC_PORTID);
+	serial_putc(&log_serial, c);
 }
 #endif
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.c	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.c	(revision 374)
@@ -3,5 +3,5 @@
  *      Toyohashi Open Platform for Embedded Real-Time Systems/
  *      Advanced Standard Profile Kernel
- * 
+ *
  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
  *                              Toyohashi Univ. of Technology, JAPAN
@@ -12,5 +12,5 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  *  Copyright (C) 2013      by Mitsuhiro Matsuura
- * 
+ *
  *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
  *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
@@ -35,5 +35,5 @@
  *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
  *      免責すること．
- * 
+ *
  *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
  *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
@@ -41,5 +41,5 @@
  *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
  *  の責任を負わない．
- * 
+ *
  *  @(#) $Id$
  */
@@ -51,4 +51,62 @@
 #include <sil.h>
 #include "target_serial.h"
+#include "hal/serial_api.h"
+#include "target_syssvc.h"
+#include "syssvc/serial.h"
+
+/*
+ *  シリアルI/Oポート初期化ブロックの定義
+ */
+typedef struct sio_port_initialization_block {
+	PinName tx;
+	PinName rx;
+} SIOPINIB;
+
+/*
+ *  シリアルI/Oポート管理ブロックの定義
+ */
+struct sio_port_control_block {
+	const SIOPINIB *p_siopinib;
+	intptr_t exinf;
+	bool_t openflag;
+	serial_t serial;
+};
+
+/*
+ *  シリアルI/Oポート管理ブロックのエリア
+ */
+SIOPCB siopcb_table[TNUM_PORT];
+
+static const SIOPINIB siopinib_table[TNUM_SIOP] =
+{
+	{ P20, P21 },
+#if TNUM_SIOP > 1
+	{ P32, P33 },
+#endif
+#if TNUM_SIOP > 2
+	{ P50, P52 },
+#endif
+#if TNUM_SIOP > 3
+	{ P23, P25 },
+#endif
+#if TNUM_SIOP > 4
+	{ PC3, PC2 },
+#endif
+#if TNUM_SIOP > 5
+	{ PC7, PC6 },
+#endif
+#if TNUM_SIOP > 6
+	{ P26, P30 },
+#endif
+};
+
+/*
+ *  シリアルI/OポートIDから管理ブロックを取り出すためのマクロ
+ */
+#define INDEX_SIOP(siopid)	 ((uint_t)((siopid) - 1))
+#define get_siopcb(siopid)	 (&(siopcb_table[INDEX_SIOP(siopid)]))
+#define get_siopinib(siopid) (&(siopinib_table[INDEX_SIOP(siopid)]))
+
+static void mbed_serial_irq_handler(uint32_t id, SerialIrq event);
 
 /*
@@ -58,5 +116,14 @@
 sio_initialize(intptr_t exinf)
 {
-	rx630_uart_initialize();
+	SIOPCB	*p_siopcb;
+	uint_t	i;
+
+	/*
+	 *  シリアルI/Oポート管理ブロックの初期化
+	 */
+	for (p_siopcb = siopcb_table, i = 0; i < TNUM_SIOP; p_siopcb++, i++) {
+		p_siopcb->p_siopinib = &(siopinib_table[i]);
+		p_siopcb->openflag = false;
+	}
 }
 
@@ -69,31 +136,23 @@
 	SIOPCB  *p_siopcb = NULL;
 	ER      ercd;
-	INTNO	intno_sio_tx, intno_sio_rx;
-	
-	/*
-	 *  シリアルI/O割込みをマスクする．
-	 *  (dis_int関数は、"\kernel\interrupt.c"に記述)
-	 */
-	p_siopcb = rx630_uart_get_siopcb(siopid);
-	intno_sio_tx = rx630_uart_intno_tx(p_siopcb);
-	intno_sio_rx = rx630_uart_intno_rx(p_siopcb);
-	ercd = dis_int(intno_sio_tx);
-	assert(ercd == E_OK);
-	ercd = dis_int(intno_sio_rx);
-	assert(ercd == E_OK);
-	
-	p_siopcb = 
-		rx630_uart_opn_por(siopid , exinf , UART_BAUDRATE , UART_CLKSRC);
-
-	/*
-	 *  シリアルI/O割込みをマスク解除する．
-	 *  (ena_int関数は、"\kernel\interrupt.c"に記述)
-	 */
-	ercd = ena_int(intno_sio_tx);
-	assert(ercd == E_OK);
-	ercd = ena_int(intno_sio_rx);
-	assert(ercd == E_OK);
-
-	return(p_siopcb);
+	serial_t *serial;
+
+	if ((siopid <= 0) || (siopid > (sizeof(siopcb_table) / sizeof(siopcb_table[0]))))
+		return NULL;
+	p_siopcb = get_siopcb(siopid);
+
+	if (p_siopcb->openflag)
+		return NULL;
+	p_siopcb->openflag = true;
+	p_siopcb->exinf = exinf;
+
+	serial = &p_siopcb->serial;
+	serial_init(serial, p_siopcb->p_siopinib->tx, p_siopcb->p_siopinib->rx);
+	serial_baud(serial, UART_BAUDRATE);
+	serial_format(serial, 8, ParityNone, 1);
+
+	serial_irq_handler(serial, mbed_serial_irq_handler, siopid);
+
+	return p_siopcb;
 }
 
@@ -105,20 +164,90 @@
 {
 	ER        ercd;
-	INTNO	intno_sio_tx, intno_sio_rx;
+	serial_t *serial = &p_siopcb->serial;
 
 	/*
 	 *  デバイス依存のクローズ処理．
 	 */
-	rx630_uart_cls_por(p_siopcb);
-	
-	/*
-	 *  シリアルI/O割込みをマスクする．
-	 */
-	intno_sio_tx = rx630_uart_intno_tx(p_siopcb);
-	intno_sio_rx = rx630_uart_intno_rx(p_siopcb);
-	ercd = dis_int(intno_sio_tx);
-	assert(ercd == E_OK);
-	ercd = dis_int(intno_sio_rx);
-	assert(ercd == E_OK);
+	serial_free(serial);
+	p_siopcb->openflag = false;
+}
+
+/*
+ *  シリアルI/Oポートへの文字送信
+ */
+bool_t
+sio_snd_chr(SIOPCB *p_siopcb, char c)
+{
+	serial_t *serial = &p_siopcb->serial;
+	if (!serial_writable(serial))
+		return false;
+	serial_putc(serial, c);
+	return true;
+}
+
+/*
+ *  シリアルI/Oポートからの文字受信
+ */
+int_t
+sio_rcv_chr(SIOPCB *p_siopcb)
+{
+	serial_t *serial = &p_siopcb->serial;
+	if (!serial_readable(serial))
+		return -1;
+	return serial_getc(serial);
+}
+
+/*
+ *  シリアルI/Oポートからのコールバックの許可
+ */
+void
+sio_ena_cbr(SIOPCB *p_siopcb, uint_t cbrtn)
+{
+	serial_t *serial = &p_siopcb->serial;
+	switch (cbrtn) {
+	case SIO_RDY_SND:
+		serial_irq_set(serial, TxIrq, true);
+		break;
+	case SIO_RDY_RCV:
+		serial_irq_set(serial, RxIrq, true);
+		break;
+	}
+}
+
+/*
+ *  シリアルI/Oポートからのコールバックの禁止
+ */
+void
+sio_dis_cbr(SIOPCB *p_siopcb, uint_t cbrtn)
+{
+	serial_t *serial = &p_siopcb->serial;
+	switch (cbrtn) {
+	case SIO_RDY_SND:
+		serial_irq_set(serial, TxIrq, false);
+		break;
+	case SIO_RDY_RCV:
+		serial_irq_set(serial, RxIrq, false);
+		break;
+	}
+}
+
+/*
+ *  シリアルI/Oポートからの送信可能コールバック
+ */
+void
+serial_irdy_snd(SIOPCB  *p_siopcb)
+{
+	/* 共通部（syssvc\serial.c）にあるsio_irdy_snd関数を呼び出し*/
+	sio_irdy_snd(p_siopcb->exinf);
+}
+
+/*
+ *  シリアルI/Oポートからの受信通知コールバック
+ */
+void
+serial_irdy_rcv(SIOPCB  *p_siopcb)
+{
+	/* 共通部（syssvc\serial.c）にあるsio_irdy_rcv関数を呼び出し*/
+	sio_irdy_rcv(p_siopcb->exinf);
 }
 
@@ -126,71 +255,23 @@
  *  SIOの割込みハンドラ
  */
-void sio_tx_isr(intptr_t exinf)
-{
-	rx630_uart_tx_isr(exinf);
-}
-
-/*
- *  SIOの割込みハンドラ
- */
-void sio_rx_isr(intptr_t exinf)
-{
-	rx630_uart_rx_isr(exinf);
-}
-
-/*
- *  シリアルI/Oポートへの文字送信
- */
-bool_t
-sio_snd_chr(SIOPCB *siopcb, char c)
-{
-	return(rx630_uart_snd_chr(siopcb, c));
-}
-
-/*
- *  シリアルI/Oポートからの文字受信
- */
-int_t
-sio_rcv_chr(SIOPCB *siopcb)
-{
-	return(rx630_uart_rcv_chr(siopcb));
-}
-
-/*
- *  シリアルI/Oポートからのコールバックの許可
- */
-void
-sio_ena_cbr(SIOPCB *siopcb, uint_t cbrtn)
-{
-	rx630_uart_ena_cbr(siopcb, cbrtn);
-}
-
-/*
- *  シリアルI/Oポートからのコールバックの禁止
- */
-void
-sio_dis_cbr(SIOPCB *siopcb, uint_t cbrtn)
-{
-	rx630_uart_dis_cbr(siopcb, cbrtn);
-}
-
-/*
- *  シリアルI/Oポートからの送信可能コールバック
- */
-void
-rx630_uart_irdy_snd(intptr_t exinf)
-{
-	/* 共通部（syssvc\serial.c）にあるsio_irdy_snd関数を呼び出し*/
-	sio_irdy_snd(exinf);
-}
-
-/*
- *  シリアルI/Oポートからの受信通知コールバック
- */
-void
-rx630_uart_irdy_rcv(intptr_t exinf)
-{
-	/* 共通部（syssvc\serial.c）にあるsio_irdy_rcv関数を呼び出し*/
-	sio_irdy_rcv(exinf);
-}
-
+void
+mbed_serial_irq_handler(uint32_t siopid, SerialIrq event)
+{
+	SIOPCB  *p_siopcb;
+
+	if ((siopid <= 0) || (siopid > (sizeof(siopcb_table) / sizeof(siopcb_table[0]))))
+		return;
+	p_siopcb = get_siopcb(siopid);
+
+	if (!p_siopcb->openflag)
+		return;
+
+	switch (event) {
+	case TxIrq:
+		serial_irdy_snd(p_siopcb);
+		break;
+	case RxIrq:
+		serial_irdy_rcv(p_siopcb);
+		break;
+	}
+}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.cfg
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.cfg	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.cfg	(revision 374)
@@ -4,8 +4,5 @@
 
 #include <target_serial.h>
+
 ATT_INI({ TA_NULL, 0, sio_initialize });
-CFG_INT(INTNO_SIO_TX, { INTATR_SIO, INTPRI_SIO });
-CFG_INT(INTNO_SIO_RX, { INTATR_SIO, INTPRI_SIO });
 
-CRE_ISR(INTNO_SIO_TX_ISR, {TA_NULL, SIO_PORTID, INTNO_SIO_TX, sio_tx_isr, 1});
-CRE_ISR(INTNO_SIO_RX_ISR, {TA_NULL, SIO_PORTID, INTNO_SIO_RX, sio_rx_isr, 1});
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.h	(revision 374)
@@ -53,18 +53,12 @@
 
 #include "gr_sakura.h"
-#include "rx630_uart.h"
+#include "serial_api.h"
 
-/*
- *  SIOの割込みハンドラのベクタ番号
- */
-#define INHNO_SIO_TX	INT_SCI0_TEI			/* 割込みハンドラ番号 */
-#define INTNO_SIO_TX	INT_SCI0_TEI			/* 割込み番号 */
-#define INHNO_SIO_RX	INT_SCI0_RXI			/* 割込みハンドラ番号 */
-#define INTNO_SIO_RX	INT_SCI0_RXI			/* 割込み番号 */
-#define INTPRI_SIO		-4						/* 割込み優先度 */
-#define INTATR_SIO		(TA_NULL)				/* 割込み属性 */
+#define SIO_RDY_SND 1
+#define SIO_RDY_RCV 2
 
 #ifndef TOPPERS_MACRO_ONLY
 
+typedef struct sio_port_control_block SIOPCB;
 
 /*
@@ -82,10 +76,4 @@
  */
 extern void		sio_cls_por(SIOPCB *p_siopcb);
-
-/*
- *  SIOの割込みハンドラ
- */
-extern void 	sio_tx_isr(intptr_t exinf);
-extern void 	sio_rx_isr(intptr_t exinf);
 
 /*
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_syssvc.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_syssvc.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_syssvc.h	(revision 374)
@@ -113,4 +113,10 @@
 
 /*
+ *  使用するシリアルポートのPinName
+ */
+#define STDIO_UART_TX P20
+#define STDIO_UART_RX P21
+
+/*
  *  システムログタスク関連の定数の定義
  *
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/MANIFEST_for_asp3
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/MANIFEST_for_asp3	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/MANIFEST_for_asp3	(revision 374)
@@ -0,0 +1,106 @@
+MANIFEST_for_asp3
+
+tecsgen
+tecsgen.rb
+tecsmerge
+tecsmerge.rb
+
+tecslib/version.rb
+
+tecslib/core/C_parser.tab.rb
+tecslib/core/C_parser.y.rb
+tecslib/core/bnf.tab.rb
+tecslib/core/bnf.y.rb
+tecslib/core/componentobj.rb
+tecslib/core/ctypes.rb
+tecslib/core/expression.rb
+tecslib/core/gen_xml.rb
+tecslib/core/generate.rb
+tecslib/core/location.rb
+tecslib/core/messages.rb
+tecslib/core/optimize.rb
+tecslib/core/plugin.rb
+tecslib/core/pluginModule.rb
+tecslib/core/syntaxobj.rb
+tecslib/core/tecs_lang.rb
+tecslib/core/tecsgen.rb
+tecslib/core/tecsinfo.rb
+tecslib/core/tool_info.rb
+tecslib/core/types.rb
+tecslib/core/unjoin_plugin.rb
+tecslib/core/value.rb
+
+tecslib/messages/messages_console_en_US.rb
+tecslib/messages/messages_console_ja_JP.rb
+tecslib/messages/messages_file_en_US.rb
+tecslib/messages/messages_file_ja_JP.rb
+
+tecslib/plugin/C2TECSBridgePlugin.rb
+tecslib/plugin/CellPlugin.rb
+tecslib/plugin/CelltypePlugin.rb
+tecslib/plugin/CompositePlugin.rb
+tecslib/plugin/DomainPlugin.rb
+tecslib/plugin/Mruby2CBridgePlugin.rb
+tecslib/plugin/MrubyBridgePlugin.rb
+tecslib/plugin/MultiPlugin.rb
+tecslib/plugin/NotifierPlugin.rb
+tecslib/plugin/RPCPlugin.rb
+tecslib/plugin/SignaturePlugin.rb
+tecslib/plugin/TECS2CBridgePlugin.rb
+tecslib/plugin/ThroughPlugin.rb
+tecslib/plugin/TracePlugin.rb
+tecslib/plugin/lib/GenParamCopy.rb
+tecslib/plugin/lib/GenTransparentMarshaler.rb
+
+tecs/tecs.h
+tecs/tecs.xsd
+
+tecs/mruby/TECSPointer.h
+tecs/mruby/TECSStruct.h
+tecs/mruby/mruby.cdl
+tecs/mruby/mrubyInitializer.cdl
+tecs/mruby/mrubyPointers.cdl
+tecs/mruby/mrubyVMs.cdl
+tecs/mruby/nMruby_tBoolPointer.c
+tecs/mruby/nMruby_tCharPointer.c
+tecs/mruby/nMruby_tDouble64Pointer.c
+tecs/mruby/nMruby_tFloat32Pointer.c
+tecs/mruby/nMruby_tInt16Pointer.c
+tecs/mruby/nMruby_tInt32Pointer.c
+tecs/mruby/nMruby_tInt64Pointer.c
+tecs/mruby/nMruby_tInt8Pointer.c
+tecs/mruby/nMruby_tIntPointer.c
+tecs/mruby/nMruby_tLongPointer.c
+tecs/mruby/nMruby_tMruby.c
+tecs/mruby/nMruby_tSCharPointer.c
+tecs/mruby/nMruby_tShortPointer.c
+tecs/mruby/nMruby_tTECSInitializer.c
+tecs/mruby/nMruby_tUCharPointer.c
+tecs/mruby/nMruby_tUInt16Pointer.c
+tecs/mruby/nMruby_tUInt32Pointer.c
+tecs/mruby/nMruby_tUInt64Pointer.c
+tecs/mruby/nMruby_tUInt8Pointer.c
+tecs/mruby/nMruby_tUIntPointer.c
+tecs/mruby/nMruby_tULongPointer.c
+tecs/mruby/nMruby_tUShortPointer.c
+tecs/mruby/tMruby.cdl
+tecs/mruby/tecs_mruby.h
+
+tecs/posix/posix.cdl
+
+tecs/rpc/PPAllocator.cdl
+tecs/rpc/RPCTask.cdl
+tecs/rpc/TDR.cdl
+tecs/rpc/rpc.cdl
+tecs/rpc/rpc_string.h
+tecs/rpc/sChannel.cdl
+tecs/rpc/sRPCErrorHandler.cdl
+tecs/rpc/tDataqueueAdaptor_inline.h
+tecs/rpc/tDataqueueOWChannel.cdl
+tecs/rpc/tPPAllocator.c
+tecs/rpc/tRPCDedicatedTaskMain.c
+tecs/rpc/tTDR_inline.h
+tecs/rpc/tecs_rpc.h
+tecs/rpc/tMessageBufferCEP.cdl
+tecs/rpc/tMessageBufferCEP_inline.h
+tecs/rpc/tMessageBufferChannel.cdl
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/MANIFEST_tecsgen_body
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/MANIFEST_tecsgen_body	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/MANIFEST_tecsgen_body	(revision 374)
@@ -1,5 +1,12 @@
 MANIFEST_tecsgen_body
+
 Makefile
-
+tecscde
+tecscde.rb
+tecsgen
+tecsgen.rb
+tecsgen_rcov.rb
+tecsmerge
+tecsmerge.rb
 cdelib/Makefile
 cdelib/cell_plugin_dialog.rb
@@ -11,8 +18,7 @@
 cdelib/tview.rb
 cdelib/version.rb
-
 tecs/TECSInfo/TECSInfo.cdl
+tecs/TECSInfo/TECSInfoAccessor.cdl
 tecs/TECSInfo/nTECSInfo_tArrayTypeInfo.c
-tecs/TECSInfo/nTECSInfo_tAttrVarInfo.c
 tecs/TECSInfo/nTECSInfo_tBoolTypeInfo.c
 tecs/TECSInfo/nTECSInfo_tCallInfo.c
@@ -28,7 +34,9 @@
 tecs/TECSInfo/nTECSInfo_tParamInfo.c
 tecs/TECSInfo/nTECSInfo_tPtrTypeInfo.c
+tecs/TECSInfo/nTECSInfo_tRawEntryDescriptorInfo.c
 tecs/TECSInfo/nTECSInfo_tRegionInfo.c
 tecs/TECSInfo/nTECSInfo_tSignatureInfo.c
 tecs/TECSInfo/nTECSInfo_tStructTypeInfo.c
+tecs/TECSInfo/nTECSInfo_tTECSInfoAccessor.c
 tecs/TECSInfo/nTECSInfo_tTECSInfoSub.c
 tecs/TECSInfo/nTECSInfo_tTECSInfo_inline.h
@@ -36,4 +44,5 @@
 tecs/TECSInfo/nTECSInfo_tVarDeclInfo.c
 tecs/TECSInfo/nTECSInfo_tVoidTypeInfo.c
+tecs/TECSInfo/tTECSInfoAccessor.c
 tecs/TLSFMalloc/README-TLSF.txt
 tecs/TLSFMalloc/tTLSFMalloc.cdl
@@ -61,4 +70,5 @@
 tecs/mruby/nMruby_tMruby.c
 tecs/mruby/nMruby_tMrubyCyclicTaskBody.c
+tecs/mruby/nMruby_tMrubyProc.c
 tecs/mruby/nMruby_tMrubyTaskBody.c
 tecs/mruby/nMruby_tMrubyVM.c
@@ -87,4 +97,7 @@
 tecs/rpc/tDataqueueAdaptor_inline.h
 tecs/rpc/tDataqueueOWChannel.cdl
+tecs/rpc/tMessageBufferCEP.cdl
+tecs/rpc/tMessageBufferCEP_inline.h
+tecs/rpc/tMessageBufferChannel.cdl
 tecs/rpc/tNBOTDR_inline.h
 tecs/rpc/tPPAllocator.c
@@ -105,11 +118,4 @@
 tecs/tecs.h
 tecs/tecs.xsd
-
-tecscde
-tecscde.rb
-tecsgen
-tecsgen.rb
-tecsgen_rcov
-tecsgen_rcov.rb
 tecslib/core/C_parser.tab.rb
 tecslib/core/C_parser.y.rb
@@ -132,4 +138,5 @@
 tecslib/core/tool_info.rb
 tecslib/core/types.rb
+tecslib/core/unjoin_plugin.rb
 tecslib/core/value.rb
 tecslib/messages/messages_console_en_US.rb
@@ -165,7 +172,16 @@
 tecslib/plugin/HRP2SemaphorePlugin.rb
 tecslib/plugin/HRP2TaskPlugin.rb
+tecslib/plugin/HRPHandlerPlugin.rb
+tecslib/plugin/HRPKernelObjectManager.rb
+tecslib/plugin/HRPKernelObjectPlugin.rb
+tecslib/plugin/HRPObjectPlugin.rb
+tecslib/plugin/HRPPlugin.rb
+tecslib/plugin/HRPRPCPlugin.rb
+tecslib/plugin/HRPSVCPlugin.rb
+tecslib/plugin/HRPTaskPlugin.rb
 tecslib/plugin/Mruby2CBridgePlugin.rb
 tecslib/plugin/MrubyBridgeCellPlugin.rb
 tecslib/plugin/MrubyBridgeCelltypePlugin.rb
+tecslib/plugin/MrubyBridgeCompositePlugin.rb
 tecslib/plugin/MrubyBridgePlugin.rb
 tecslib/plugin/MrubyBridgeSignaturePlugin.rb
@@ -175,4 +191,6 @@
 tecslib/plugin/OpaqueRPCPlugin.rb
 tecslib/plugin/RPCPlugin.rb
+tecslib/plugin/RepeatCellPlugin.rb
+tecslib/plugin/RepeatJoinPlugin.rb
 tecslib/plugin/SharedOpaqueRPCPlugin.rb
 tecslib/plugin/SharedRPCPlugin.rb
@@ -186,6 +204,4 @@
 tecslib/plugin/lib/GenParamCopy.rb
 tecslib/plugin/lib/GenTransparentMarshaler.rb
+tecslib/plugin/lib/MrubyBridgeCelltypePluginModule.rb
 tecslib/version.rb
-
-tecsmerge
-tecsmerge.rb
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/in_exerb.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/in_exerb.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/in_exerb.rb	(revision 374)
@@ -0,0 +1,114 @@
+# coding: utf-8
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2015 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#   $Id$
+#++
+
+# exerb 版で最初に読みこまれるファイル
+# このファイルから generate.rb が読みこまれる
+
+$IN_EXERB=true
+
+# この変数は exerb 版のみ
+$path = ENV[ 'PATH' ]
+
+#=== cygwin のパスを Windows パスに変換
+# cygpath コマンドを探して、見つかれば変換する
+# 変換できなかった、または変換後のパスが見つからない場合、default を返す
+def cygpath( path, default = nil )
+  if ! $IN_EXERB then
+    return default
+  end
+  if File.exist? path then
+    return default
+  end
+
+  found = false
+  $path.split( ";" ).each{ |path2|
+    cygpath_path = "#{path2}\\cygpath.exe"
+    if File.exist?( cygpath_path )  then
+      path3 = nil
+      dbgPrint "in_exerb: cygpath: found\n"
+      IO.popen( "cygpath -m #{path}", "r"){ |io|
+        path3 = io.gets.chomp!
+      }
+      dbgPrint "in_exerb: cygpath: '#{path}' => '#{path3}'\n"
+      # File.stat( path3.to_s )
+
+      if File.exist?( path3 )
+        dbgPrint "in_exerb: cygpath: '#{path3}' found\n"
+        return path3
+      else
+        break
+      end
+    end
+  }
+  dbgPrint "cygpath '#{path}' not found\n"
+  return default
+end
+
+# 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|
+  found = false
+  [ "gcc.exe", "gcc-3.exe", "gcc-4.exe" ].each{ |gcc|
+    gcc_path = "#{path}\\#{gcc}"
+    if File.exist?( gcc_path )  then
+      begin
+        magic = File.read( gcc_path, 2 )
+        if magic == "MZ"                  # マジックをチェック
+          $gcc = gcc
+          found = true
+          break
+        end
+      rescue
+        # magic の読出しに失敗。無視
+      end
+    end
+  }
+  break if found
+}
+
+# cpp コマンドを設定する
+$cpp = "#{$gcc} -E -D TECSGEN"
+
+# exerb 版 TECS ジェネレータの実行を開始
+require "tecsgen.rb"
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfo.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfo.cdl	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfo.cdl	(revision 374)
@@ -0,0 +1,618 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+import_C( "t_stddef.h" );
+
+/* Constants of Kinds */
+const int8_t TECSTypeKind_BoolType    = 1;
+const int8_t TECSTypeKind_IntType     = 2;
+const int8_t TECSTypeKind_FloatType   = 3;
+const int8_t TECSTypeKind_PtrType     = 4;
+const int8_t TECSTypeKind_ArrayType   = 5;
+const int8_t TECSTypeKind_DefinedType = 6;
+const int8_t TECSTypeKind_StructType  = 7;
+const int8_t TECSTypeKind_EnumType    = 8;
+const int8_t TECSTypeKind_VoidType    = 9;
+const int8_t TECSTypeKind_DescriptorType = 10;
+
+/* Parameter Direction */
+const int8_t PARAM_DIR_IN         = 1;
+const int8_t PARAM_DIR_OUT        = 2;
+const int8_t PARAM_DIR_INOUT      = 3;
+const int8_t PARAM_DIR_SEND       = 4;
+const int8_t PARAM_DIR_RECEIVE    = 5;
+
+/* VarDecl declType */
+const int8_t DECLTYPE_STMEMBER    = 1;  /* Struct Member */
+const int8_t DECLTYPE_ATTR        = 2;
+const int8_t DECLTYPE_VAR         = 3;
+
+/* VarDecl place info */
+const int8_t VARDECL_PLACE_STRUCT = 1;
+const int8_t VARDECL_PLACE_NON    = 2;
+const int8_t VARDECL_PLACE_CB     = 3;
+const int8_t VARDECL_PLACE_INIB   = 4;
+
+/* CallInfo place info */
+const int8_t CALL_PLACE_NON       = 1;
+const int8_t CALL_PLACE_INIB_DES  = 2;
+const int8_t CALL_PLACE_CB_DES    = 3;
+const int8_t CALL_PLACE_INIB_IDX  = 4;
+const int8_t CALL_PLACE_CB_IDX    = 5;
+
+namespace nTECSInfo {
+
+    /*******   SIGNATURES   *******/
+
+    /* Type Information of attr, var, param, return */
+    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 と仕様が異なることに注意)
+        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
+        ER     getTypeInfo( [out]Descriptor(sTypeInfo) *desc );
+           // kind == POINTER, TYPEDEF の場合、desc に有効な値を返す
+        uint32_t   getNMember(void);
+           // STRUCT の場合メンバー数
+        ER     getMemberInfo( [in]uint32_t ith, [out]Descriptor(sVarDeclInfo) *desc );
+           // kind == STRUCT の場合、desc に有効な値を返す
+           // ith はメンバーの添数 0<=ith<*num
+           // ith が範囲外の場合 E_NORES を返す
+//        void   getSignatureInfo( [out]Descriptor(sSignatureInfo) *desc );
+//           // kind == DESCRIPTOR の場合、desc に有効な値を返す
+    };
+
+    /* ATTR, VAR, struct member Information */
+    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 と仕様が異なることに注意)
+        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 が返される
+        ER         getSizeIs( [out]uint32_t *size, [in]const void *p_cb);
+          // p_cb を与えると、size を返す (size_is 指定がない場合，E_NOSPT を返す)
+    };
+
+    /* PARAM Information */
+    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 と仕様が異なることに注意)
+        ER         getTypeInfo( [out]Descriptor(sTypeInfo) *desc);
+        ER         getDir( [out]int8_t *dir );
+    };
+
+    /* FUNCTION Information */
+    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 と仕様が異なることに注意)
+        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 を返す
+    };
+
+    /* SIGNATURE Information */
+    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 と仕様が異なることに注意)
+        uint32_t   getNFunction(void);
+        ER         getFunctionInfo( [in]uint32_t ith, [out]Descriptor( sFunctionInfo ) *desc );
+           // 0 <= ith < *num
+           // ith が範囲外の場合 E_NORES を返す
+    };
+
+    /* CALL Information */
+    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 と仕様が異なることに注意)
+        void       getSignatureInfo( [out]Descriptor( sSignatureInfo ) *desc );
+        uint32_t   getArraySize(void);
+        void       getSpecifierInfo( [out]bool_t   *b_optional,
+                                     [out]bool_t   *b_dynamic,
+                                     [out]bool_t   *b_ref_desc,
+                                     [out]bool_t   *b_omit );
+        void       getInternalInfo(  [out]bool_t   *b_allocator_port,
+                                     [out]bool_t   *b_require_port );
+        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 );    // 単一のセル
+    };
+
+    /* ENTRY Information */
+    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 と仕様が異なることに注意)
+        void       getSignatureInfo( [out]Descriptor( sSignatureInfo ) *desc );
+        uint32_t   getArraySize(void);
+        bool_t     isInline(void);
+    };
+
+    /* CELLTYPE Information */
+    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 と仕様が異なることに注意)
+        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 を返す
+        uint32_t   getNCall(void);
+        ER         getCallInfo( [in]uint32_t ith, [out]Descriptor(sCallInfo)*desc );
+           // ith が範囲外の場合 E_NORES を返す
+        uint32_t   getNEntry(void);
+        ER         getEntryInfo( [in]uint32_t ith, [out]Descriptor(sEntryInfo)*desc );
+           // ith が範囲外の場合 E_NORES を返す
+        bool_t     isSingleton(void);
+        bool_t     isIDX_is_ID(void);
+        uint32_t   sizeOfCB(void);
+        uint32_t   sizeOfINIB(void);
+    };
+
+    /* CELL Information */
+    [deviate]
+    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 と仕様が異なることに注意)
+        uint32_t   getNRawEntryDescriptorInfo( void );
+        ER         getRawEntryDescriptorInfo( [in]int_t index, [out]Descriptor(sRawEntryDescriptorInfo) *desc );
+           // index は、受け口を指定 (CelltypeInfo の cEntryInfo の序数に一致する)
+        void       getCelltypeInfo( [out]Descriptor( sCelltypeInfo ) *desc );
+        void       getCBP( [out]void **cbp );      // out: 逸脱
+        void       getINIBP( [out]void **inibp );  // out: 逸脱
+    };
+
+    [deviate]
+    signature sRawEntryDescriptorInfo {
+        uint16_t   getNRawEntryDescriptorInfo( void );         // 受け口配列の場合、要素数を返す。非配列の場合 1。
+        ER         getRawDescriptor( [in]int_t ith, [out]void **rawDesc );
+                        // ith が配列範囲外の場合、E_NOEXS を返す
+    };
+
+    /* NAMESPACE Information */
+    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 と仕様が異なることに注意)
+        uint32_t   getNNamespace(void);
+        ER         getNamespaceInfo( [in]uint32_t ith, [out]Descriptor(sNamespaceInfo) *des );
+           // ith が範囲外の場合 E_NORES を返す
+        uint32_t   getNSignature(void);
+        ER         getSignatureInfo( [in]uint32_t ith, [out]Descriptor(sSignatureInfo) *des );
+           // ith が範囲外の場合 E_NORES を返す
+        uint32_t   getNCelltype(void);
+        ER     getCelltypeInfo( [in]uint32_t ith,  [out]Descriptor(sCelltypeInfo) *des );
+           // ith が範囲外の場合 E_NORES を返す
+    };
+
+    /* REGION Information */
+    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 と仕様が異なることに注意)
+        uint32_t   getNCell(void);
+        ER         getCellInfo( [in]uint32_t ith,    [out]Descriptor(sCellInfo) *des );
+           // ith が範囲外の場合 E_NORES を返す
+        uint32_t   getNRegion(void);
+        ER         getRegionInfo( [in]uint32_t ith,  [out]Descriptor(sRegionInfo) *des );
+           // ith が範囲外の場合 E_NORES を返す
+    };
+
+    /* TECS Information */
+    signature sTECSInfo {
+        ER     findNamespace([in,string]const char_t *namespace_path, [out]Descriptor( sNamespaceInfo )*nsDesc);
+        ER     findRegion(   [in,string]const char_t *namespace_path, [out]Descriptor( sRegionInfo )*regionDesc);
+        ER     findSignature([in,string]const char_t *namespace_path, [out]Descriptor( sSignatureInfo )*signatureDesc);
+        ER     findCelltype( [in,string]const char_t *namespace_path, [out]Descriptor( sCelltypeInfo )*celltypeDesc);
+        ER     findCell(     [in,string]const char_t *namespace_path, [out]Descriptor( sCellInfo )*cellDesc);
+        ER     findRawEntryDescriptor(
+                             [in,string]const char_t *namespace_path,
+                             [in]             int_t  ith,
+                             [out]Descriptor( sRawEntryDescriptorInfo )*rawEntryDescDesc,
+                             [out]Descriptor( sEntryInfo )*entryDesc);
+        ER     findRawEntryDescriptor_unsafe(           // このメソッドは、非配列の場合のみしようできる
+                             [in,string]const char_t *namespace_path,
+                             [out]void **rawDesc );
+    };
+
+    /*******   CELLTYPES   *******/
+
+    /*
+     * tTECSInfo セルタイプのセルは、ユーザーが設置する．
+     *
+     * このセルから、tTECSInfoSub への結合は、プラグインにより自動的に
+     * 行われるため、ユーザーは、このセルを設置するだけでよい．
+     * (プロトタイプを用いていないのは、このセルを任意のリージョンに置
+     * くことを想定してのもの)
+     */
+    [singleton,
+     generate( TECSInfoPlugin, "" )]
+    celltype tTECSInfo {
+        [inline]
+            entry sTECSInfo eTECSInfo;
+        call  sTECSInfo cTECSInfo;
+        FACTORY{
+            write( "global_tecsgen.h", "#define setRawEntryDescriptor( callDesc, callPortSignature, rawEntryDesc )   (callDesc).vdes = (struct tag_ ## callPortSignature ## _VDES *) rawEntryDesc" );
+        };
+    };
+
+    /*
+     * tTECSInfoSub セルタイプのセルは、プラグインにより自動生成される．
+     * プラグインは、生成を行う前にエラーが発生している場合、セルを生成しない．
+     * (TECSInfoSub セルが未定義のエラーも出ることになる。不完全な状態
+     * で生成しようとすると、Ruby 例外を発生する可能性があるため、生成
+     * しない)
+     */
+    [singleton]
+    celltype tTECSInfoSub {
+        entry sTECSInfo eTECSInfo;
+        [ref_desc]
+            call sNamespaceInfo cNamespaceInfo;   // root namespace
+        [ref_desc]
+            call sRegionInfo    cRegionInfo;      // root region
+        // 内部処理用の呼び口 (何度も使いまわすので、使う直前に(再)設定すること）
+        [dynamic,optional]
+            call sNamespaceInfo cNamespaceInfoTemp;
+        [dynamic,optional]
+            call sRegionInfo    cRegionInfoTemp;
+        [dynamic,optional]
+            call sSignatureInfo cSignatureInfoTemp;
+        [dynamic,optional]
+            call sCelltypeInfo  cCelltypeInfoTemp;
+        [dynamic,optional]
+            call sCellInfo      cCellInfoTemp;
+        [dynamic,optional]
+            call sEntryInfo     cEntryInfoTemp;
+        [dynamic,optional]
+            call sRawEntryDescriptorInfo cRawEntryDescriptorInfoTemp;
+
+        attr {
+            int32_t name_len = 256;
+            int32_t path_len = 1024;
+        };
+        var {
+            [size_is(name_len)]
+                char_t  *name1;
+            [size_is(name_len)]
+                char_t  *name2;
+            [size_is(path_len)]
+                char_t  *path;
+        };
+    };
+
+    celltype tNamespaceInfo {
+        attr {
+            char *name;
+        };
+
+        entry sNamespaceInfo eNamespaceInfo;
+        [ref_desc,optional]
+            call  sSignatureInfo cSignatureInfo[];
+        [ref_desc,optional]
+            call  sCelltypeInfo  cCelltypeInfo[];
+        [ref_desc,optional]
+            call  sNamespaceInfo cNamespaceInfo[];
+    };
+
+    /* SIGNATURE information */
+    celltype tSignatureInfo{
+        attr {
+            char *name;
+        };
+
+        entry sSignatureInfo   eSignatureInfo;
+        [ref_desc,optional]
+            call sFunctionInfo cFunctionInfo[];
+    };
+    celltype tFunctionInfo {
+        attr {
+            char_t *name;
+            bool_t  bOneway;
+        };
+        entry sFunctionInfo eFunctionInfo;
+        [ref_desc,optional]
+            call sParamInfo cParamInfo[];
+        [ref_desc]
+            call sTypeInfo  cReturnTypeInfo;
+    };
+    celltype tParamInfo {
+        attr {
+            char_t *name;
+            int8_t dir;
+            char_t *sizeIsExpr;
+            char_t *countIsExpr;
+            char_t *stringExpr;
+        };
+        entry sParamInfo eParamInfo;
+        [ref_desc]
+            call sTypeInfo cTypeInfo;
+    };
+
+    /* CELLTYPE information */
+    celltype tCelltypeInfo{
+        attr {
+            char_t   *name;
+            bool_t   b_singleton;
+            bool_t   b_IDX_is_ID_act;
+            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 は省略される．
+        };
+        [ref_desc,optional]
+            call  sEntryInfo   cEntryInfo[];
+        [ref_desc,optional]
+            call  sCallInfo    cCallInfo[];
+        [ref_desc,optional]
+            call  sVarDeclInfo cAttrInfo[];
+        [ref_desc,optional]
+            call  sVarDeclInfo cVarInfo[];
+
+        entry sCelltypeInfo    eCelltypeInfo;
+    };
+    celltype tCallInfo {
+        attr {
+            char_t   *name;
+            uint32_t offset;
+            uint32_t array_size;
+            bool_t   b_optional;
+            bool_t   b_omit;
+            bool_t   b_dynamic;
+            bool_t   b_ref_desc;
+            bool_t   b_allocator_port;
+            bool_t   b_require_port;
+            int8_t   place;
+            bool_t   b_VMT_useless;        // VMT (関数テーブル) 不要最適化 (関数直接呼出し)
+            bool_t   b_skelton_useless;    // スケルトン関数不要 (
+            bool_t   b_cell_unique;        // 単一のセル
+        };
+        entry sCallInfo eCallInfo;
+        [ref_desc]
+            call sSignatureInfo cSignatureInfo;
+        FACTORY {
+            write( "$ct_global$_factory.h", "#include \"include_all_signature_header.h\"" );
+        };
+    };
+    celltype tEntryInfo {
+        attr {
+            char_t *name;
+            bool_t b_inline;
+            uint32_t array_size;
+        };
+        entry sEntryInfo eEntryInfo;
+        [ref_desc]
+            call sSignatureInfo cSignatureInfo;
+        FACTORY {
+            write( "$ct_global$_factory.h", "#include \"include_all_signature_header.h\"" );
+        };
+    };
+    /* Variable Declarator (attr, var, struct member) */
+    celltype tVarDeclInfo {
+        attr {
+            char_t   *name;
+            char_t   *sizeIsExpr;
+            int8_t   declType;        /* valid when attr, var */
+            int8_t   place;
+            uint32_t offset;
+        };
+        entry sVarDeclInfo eVarDeclInfo;
+        [ref_desc]
+            call sTypeInfo cTypeInfo;
+    };
+
+    /* REGION & CELL information */
+    celltype tRegionInfo {
+        attr {
+            char *name;
+        };
+
+        entry sRegionInfo eRegionInfo;
+        [ref_desc,optional]
+            call  sCellInfo   cCellInfo[];
+        [ref_desc,optional]
+            call  sRegionInfo cRegionInfo[];
+    };
+    celltype tCellInfo {
+        attr {
+            char_t *name;
+            void   *cbp;
+            void   *inibp;
+        };
+        [ref_desc]
+            call  sCelltypeInfo cCelltypeInfo;
+        [ref_desc,optional]
+            call  sRawEntryDescriptorInfo cRawEntryDescriptor[];
+        entry sCellInfo eCellInfo;
+    };
+    celltype tRawEntryDescriptorInfo {
+        attr {
+            int_t size;   // 非配列の場合 0
+            [size_is(size)]
+                void  **rawEntryDescriptor;
+        };
+        entry sRawEntryDescriptorInfo eRawEntryDescriptor;
+        // [ref_desc]
+        //    call  sEntryInfo             cEntryInfo;
+    };
+
+    /* celltypes of TYPEs */
+    celltype tVoidTypeInfo {
+        attr {
+            char_t   *name;
+            int8_t   typeKind;
+            uint32_t size;     /* bytes */
+            bool_t   b_const;
+            bool_t   b_volatile;
+        };
+        entry sTypeInfo eTypeInfo;
+    };
+    celltype tBoolTypeInfo {
+        attr {
+            char_t   *name;
+            int8_t   typeKind;
+            uint32_t size;     /* bytes */
+            bool_t   b_const;
+            bool_t   b_volatile;
+        };
+        entry sTypeInfo eTypeInfo;
+    };
+    celltype tIntTypeInfo {
+        attr {
+            char_t   *name;
+            int8_t   typeKind;
+            uint32_t size;     /* bytes */
+            bool_t   b_const;
+            bool_t   b_volatile;
+        };
+        entry sTypeInfo eTypeInfo;
+    };
+    celltype tFloatTypeInfo {
+        attr {
+            char_t   *name;
+            int8_t   typeKind;
+            uint32_t size;     /* bytes */
+            bool_t   b_const;
+            bool_t   b_volatile;
+        };
+        entry sTypeInfo eTypeInfo;
+    };
+    celltype tStructTypeInfo {
+        attr {
+            char_t   *name;
+            int8_t   typeKind;
+            uint32_t size;     /* bytes */
+            bool_t   b_const;
+            bool_t   b_volatile;
+        };
+        entry sTypeInfo eTypeInfo;
+        [ref_desc]
+            call sVarDeclInfo cVarDeclInfo[];
+    };
+    celltype tPtrTypeInfo {
+        attr {
+            char_t   *name;
+            int8_t   typeKind;
+            uint32_t size;     /* bytes */
+            bool_t   b_const;
+            bool_t   b_volatile;
+        };
+        entry sTypeInfo eTypeInfo;
+        [ref_desc]
+            call sTypeInfo cTypeInfo;
+        FACTORY {
+            write( "$ct_global$_factory.h", "#include \"include_all_signature_header.h\"" );
+        };
+    };
+    celltype tArrayTypeInfo {
+        attr {
+            char_t   *name;
+            int8_t   typeKind;
+            uint32_t size;     /* bytes */
+            bool_t   b_const;
+            bool_t   b_volatile;
+        };
+        entry sTypeInfo eTypeInfo;
+        [ref_desc]
+            call sTypeInfo cTypeInfo;
+        FACTORY {
+            write( "$ct_global$_factory.h", "#include \"include_all_signature_header.h\"" );
+        };
+    };
+    celltype tDefinedTypeInfo {
+        attr {
+            char_t   *name;
+            int8_t   typeKind;
+            uint32_t size;     /* bytes */
+            bool_t   b_const;
+            bool_t   b_volatile;
+        };
+        entry sTypeInfo eTypeInfo;
+        [ref_desc]
+            call sTypeInfo cTypeInfo;
+    };
+    celltype tDescriptorTypeInfo {
+        attr {
+            char_t   *name;
+            int8_t   typeKind;
+            uint32_t size;     /* bytes */
+            bool_t   b_const;
+            bool_t   b_volatile;
+        };
+        entry sTypeInfo eTypeInfo;
+        [ref_desc]
+            call sSignatureInfo cSignatureInfo;
+        FACTORY {
+            write( "$ct_global$_factory.h", "#include \"include_all_signature_header.h\"" );
+        };
+    };
+};
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfoAccessor.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfoAccessor.cdl	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfoAccessor.cdl	(revision 374)
@@ -0,0 +1,164 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+// mruby からアクセスできるようなシグニチャにした、アクセス用セルタイプの定義
+// つまり、シグニチャから Descriptor 型をなくし、名前を指定して動的結合させるセルタイプを用意する
+
+import( <TECSInfo.cdl> );
+
+//namespace nTECSInfo {
+    signature sAccessor{
+        ER   selectNamespaceInfoByName( [in,string]const char_t *namespacePath );
+        ER   selectCelltypeInfoByName(  [in,string]const char_t *namespacePath );
+        ER   selectSignatureInfoByName( [in,string]const char_t *namespacePath );
+        ER   selectRegionInfoByName(    [in,string]const char_t *regionPath );
+        ER   selectCellInfoByName(      [in,string]const char_t *cellPath );
+
+        // namespace
+        ER   getSelectedNamespaceInfo( [out,string(max_len)]char_t *name, [in]int_t max_len, [out]int_t *num_namespace, [out]int_t *num_celltype, [out]int_t *num_signature );
+        ER   selectCelltypeInfo( [in]int_t ith );
+        ER   selectSignatureInfo( [in]int_t ith );
+
+        // celltype
+        ER   getSelectedCelltypeInfo( [out,string(max_len)]char_t *name, [in]int_t max_len,
+                                      [out]int_t *num_attr, [out]int_t *num_var, [out]int_t *num_call, [out]int_t *num_entry );
+        ER   selectCallInfo( [in]int_t ith );
+        ER   selectEntryInfo( [in]int_t ith );
+        ER   selectAttrInfo( [in]int_t ith );
+        ER   selectVarInfo( [in]int_t ith );
+
+        // attr
+        ER   getSelectedAttrInfo( [out,string(max_len)]char_t *name, [in]int_t max_len );
+        ER   getSizeIsExprOfAttr( [out,string(max_len)]char_t *expr_str, [in]int32_t max_len );
+        ER   selectTypeInfoOfAttr(void);
+
+        // var
+        ER   getSelectedVarInfo( [out,string(max_len)]char_t *name, [in]int_t max_len );
+        ER   getSizeIsExprOfVar( [out,string(max_len)]char_t *expr_str, [in]int32_t max_len );
+        ER   selectTypeInfoOfVar(void);
+
+        // call
+        ER   getSelectedCallInfo( [out,string(max_len)]char_t *name, [in]int_t max_len, [out]int_t *array_size );
+        ER   selectSignatureOfCall(void);
+        ER   getSelectedCallSpecifierInfo( [out]bool_t   *b_optional,  [out]bool_t   *b_dynamic,
+                                           [out]bool_t   *b_ref_desc,  [out]bool_t   *b_omit );
+        ER   getSelectedCallInternalInfo(  [out]bool_t   *b_allocator_port, [out]bool_t   *b_require_port );
+        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 );    // 単一のセル
+
+        // entry
+        ER   getSelectedEntryInfo( [out,string(max_len)]char_t *name, [in]int_t max_len, [out]int_t *array_size );
+        ER   selectSignatureOfEntry(void);
+        ER   getSelectedEntryInlineInfo([out]bool_t *b_inline);
+
+        // signature
+        ER   getSelectedSignatureInfo( [out,string(max_len)]char_t *name, [in]int_t max_len, [out]int_t *num_function );
+        ER   selectFunctionInfoByIndex( [in]int_t ith );
+
+        // function
+        ER   getSelectedFunctionInfo( [out,string(max_len)]char_t *name, [in]int_t max_len, [out]int_t *num_args );
+        ER   selectTypeInfoOfReturn(void);
+
+        // parameter of function
+        ER   getSelectedParamInfo( [out,string(max_len)]char_t *name, [in]int_t max_len, [out]int8_t *dir );
+        ER   selectParamInfo( [in]int_t ith );
+        ER   selectTypeInfoOfParam(void);
+
+        // type of function return and parameter, celltype attr and var
+        ER   getSelectedTypeInfo( [out,string(max_len)]char_t *name, [in]int_t max_len, [out]int8_t *kind );
+        ER   selectTypeInfoOfType(void);
+
+        // region
+        ER   getSelectedRegionInfo( [out,string(max_len)]char_t *name, [in]int_t max_len, [out]int_t *num_cell );
+        ER   selectCellInfo( [in]int_t ith );
+
+        // 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 が変更される
+    };
+
+    celltype tTECSInfoAccessor {
+
+        entry sAccessor eSelector;
+
+        call  nTECSInfo::sTECSInfo cTECSInfo;
+        [dynamic,optional]
+            call  nTECSInfo::sNamespaceInfo cNSInfo;
+        [dynamic,optional]
+            call  nTECSInfo::sCelltypeInfo  cCelltypeInfo;
+        [dynamic,optional]
+            call  nTECSInfo::sSignatureInfo cSignatureInfo;
+        [dynamic,optional]
+            call  nTECSInfo::sFunctionInfo  cFunctionInfo;
+        [dynamic,optional]
+            call  nTECSInfo::sParamInfo     cParamInfo;
+        [dynamic,optional]
+            call  nTECSInfo::sCallInfo      cCallInfo;
+        [dynamic,optional]
+            call  nTECSInfo::sEntryInfo     cEntryInfo;
+        [dynamic,optional]
+            call  nTECSInfo::sVarDeclInfo   cAttrInfo;
+        [dynamic,optional]
+            call  nTECSInfo::sVarDeclInfo   cVarInfo;
+        [dynamic,optional]
+            call  nTECSInfo::sTypeInfo      cTypeInfo;
+
+        [dynamic,optional]
+            call  nTECSInfo::sRegionInfo    cRegionInfo;
+        [dynamic,optional]
+            call  nTECSInfo::sCellInfo      cCellInfo;
+
+        attr{
+            int16_t NAME_LEN = 256;
+        };
+        var{
+            [size_is(NAME_LEN)]
+                char_t  *name;
+            [size_is(NAME_LEN)]
+                char_t  *name2;
+            int8_t      *selectedCbp;
+            int8_t      *selectedInibp;
+        };
+    };
+//};
+
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tArrayTypeInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tArrayTypeInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tArrayTypeInfo.c	(revision 374)
@@ -0,0 +1,253 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * typeKind         int8_t           ATTR_typeKind   
+ * size             uint32_t         ATTR_size       
+ * b_const          bool_t           ATTR_b_const    
+ * b_volatile       bool_t           ATTR_b_volatile 
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task
+ *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cTypeInfo_getNameLength( );
+ *   uint32_t       cTypeInfo_getSize( );
+ *   int8_t         cTypeInfo_getKind( );
+ *   uint32_t       cTypeInfo_getNType( );
+ *   ER             cTypeInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   uint32_t       cTypeInfo_getNMember( );
+ *   ER             cTypeInfo_getMemberInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_ref_desc()      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tArrayTypeInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTypeInfo
+ * entry port: eTypeInfo
+ * signature:  nTECSInfo_sTypeInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getName
+ * name:         eTypeInfo_getName
+ * global_name:  nTECSInfo_tArrayTypeInfo_eTypeInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNameLength
+ * name:         eTypeInfo_getNameLength
+ * global_name:  nTECSInfo_tArrayTypeInfo_eTypeInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eTypeInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getSize
+ * name:         eTypeInfo_getSize
+ * global_name:  nTECSInfo_tArrayTypeInfo_eTypeInfo_getSize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getSize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	return ATTR_size;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getKind
+ * name:         eTypeInfo_getKind
+ * global_name:  nTECSInfo_tArrayTypeInfo_eTypeInfo_getKind
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+int8_t
+eTypeInfo_getKind(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	return TECSTypeKind_ArrayType;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNType
+ * name:         eTypeInfo_getNType
+ * global_name:  nTECSInfo_tArrayTypeInfo_eTypeInfo_getNType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNType(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	return ATTR_size / cTypeInfo_getSize();  /* 配列要素数 = サイズ / 要素サイズ */
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getTypeInfo
+ * name:         eTypeInfo_getTypeInfo
+ * global_name:  nTECSInfo_tArrayTypeInfo_eTypeInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+  ER      ercd = E_OK;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  *desc = cTypeInfo_refer_to_descriptor();
+  return ercd;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNMember
+ * name:         eTypeInfo_getNMember
+ * global_name:  nTECSInfo_tArrayTypeInfo_eTypeInfo_getNMember
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNMember(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getMemberInfo
+ * name:         eTypeInfo_getMemberInfo
+ * global_name:  nTECSInfo_tArrayTypeInfo_eTypeInfo_getMemberInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getMemberInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tBoolTypeInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tBoolTypeInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tBoolTypeInfo.c	(revision 374)
@@ -0,0 +1,237 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * typeKind         int8_t           ATTR_typeKind   
+ * size             uint32_t         ATTR_size       
+ * b_const          bool_t           ATTR_b_const    
+ * b_volatile       bool_t           ATTR_b_volatile 
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tBoolTypeInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTypeInfo
+ * entry port: eTypeInfo
+ * signature:  nTECSInfo_sTypeInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getName
+ * name:         eTypeInfo_getName
+ * global_name:  nTECSInfo_tBoolTypeInfo_eTypeInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNameLength
+ * name:         eTypeInfo_getNameLength
+ * global_name:  nTECSInfo_tBoolTypeInfo_eTypeInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eTypeInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getSize
+ * name:         eTypeInfo_getSize
+ * global_name:  nTECSInfo_tBoolTypeInfo_eTypeInfo_getSize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getSize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return ATTR_size;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getKind
+ * name:         eTypeInfo_getKind
+ * global_name:  nTECSInfo_tBoolTypeInfo_eTypeInfo_getKind
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+int8_t
+eTypeInfo_getKind(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return TECSTypeKind_ArrayType;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNType
+ * name:         eTypeInfo_getNType
+ * global_name:  nTECSInfo_tBoolTypeInfo_eTypeInfo_getNType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNType(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return 0;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getTypeInfo
+ * name:         eTypeInfo_getTypeInfo
+ * global_name:  nTECSInfo_tBoolTypeInfo_eTypeInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return E_NOEXS;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNMember
+ * name:         eTypeInfo_getNMember
+ * global_name:  nTECSInfo_tBoolTypeInfo_eTypeInfo_getNMember
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNMember(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getMemberInfo
+ * name:         eTypeInfo_getMemberInfo
+ * global_name:  nTECSInfo_tBoolTypeInfo_eTypeInfo_getMemberInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getMemberInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCallInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCallInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCallInfo.c	(revision 374)
@@ -0,0 +1,260 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * offset           uint32_t         ATTR_offset     
+ * array_size       uint32_t         ATTR_array_size 
+ * b_optional       bool_t           ATTR_b_optional 
+ * b_omit           bool_t           ATTR_b_omit     
+ * b_dynamic        bool_t           ATTR_b_dynamic  
+ * b_ref_desc       bool_t           ATTR_b_ref_desc 
+ * b_allocator_port bool_t           ATTR_b_allocator_port
+ * b_require_port   bool_t           ATTR_b_require_port
+ * place            int8_t           ATTR_place      
+ * b_VMT_useless    bool_t           ATTR_b_VMT_useless
+ * b_skelton_useless bool_t           ATTR_b_skelton_useless
+ * b_cell_unique    bool_t           ATTR_b_cell_unique
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cSignatureInfo signature: nTECSInfo_sSignatureInfo context:task
+ *   ER             cSignatureInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cSignatureInfo_getNameLength( );
+ *   uint32_t       cSignatureInfo_getNFunction( );
+ *   ER             cSignatureInfo_getFunctionInfo( uint32_t ith, Descriptor( nTECSInfo_sFunctionInfo )* desc );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sSignatureInfo ) cSignatureInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sSignatureInfo ) cSignatureInfo_ref_desc()      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tCallInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eCallInfo
+ * entry port: eCallInfo
+ * signature:  nTECSInfo_sCallInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eCallInfo_getName
+ * name:         eCallInfo_getName
+ * global_name:  nTECSInfo_tCallInfo_eCallInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eCallInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eCallInfo_getNameLength
+ * name:         eCallInfo_getNameLength
+ * global_name:  nTECSInfo_tCallInfo_eCallInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eCallInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eCallInfo_getSignatureInfo
+ * name:         eCallInfo_getSignatureInfo
+ * global_name:  nTECSInfo_tCallInfo_eCallInfo_getSignatureInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eCallInfo_getSignatureInfo(CELLIDX idx, Descriptor( nTECSInfo_sSignatureInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *desc = cSignatureInfo_refer_to_descriptor();
+}
+
+/* #[<ENTRY_FUNC>]# eCallInfo_getArraySize
+ * name:         eCallInfo_getArraySize
+ * global_name:  nTECSInfo_tCallInfo_eCallInfo_getArraySize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eCallInfo_getArraySize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return ATTR_array_size;
+}
+
+/* #[<ENTRY_FUNC>]# eCallInfo_getSpecifierInfo
+ * name:         eCallInfo_getSpecifierInfo
+ * global_name:  nTECSInfo_tCallInfo_eCallInfo_getSpecifierInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eCallInfo_getSpecifierInfo(CELLIDX idx, bool_t* b_optional, bool_t* b_dynamic, bool_t* b_ref_desc, bool_t* b_omit)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  *b_optional = ATTR_b_optional;
+  *b_dynamic  = ATTR_b_dynamic;
+  *b_ref_desc = ATTR_b_ref_desc;
+  *b_omit     = ATTR_b_omit;
+}
+
+/* #[<ENTRY_FUNC>]# eCallInfo_getInternalInfo
+ * name:         eCallInfo_getInternalInfo
+ * global_name:  nTECSInfo_tCallInfo_eCallInfo_getInternalInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eCallInfo_getInternalInfo(CELLIDX idx, bool_t* b_allocator_port, bool_t* b_require_port)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  *b_allocator_port = ATTR_b_allocator_port;
+  *b_require_port   = ATTR_b_require_port;
+}
+
+/* #[<ENTRY_FUNC>]# eCallInfo_getLocationInfo
+ * name:         eCallInfo_getLocationInfo
+ * global_name:  nTECSInfo_tCallInfo_eCallInfo_getLocationInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eCallInfo_getLocationInfo(CELLIDX idx, uint32_t* offset, int8_t* place)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  *offset = ATTR_offset;
+  *place  = ATTR_place;
+}
+
+/* #[<ENTRY_FUNC>]# eCallInfo_getOptimizeInfo
+ * name:         eCallInfo_getOptimizeInfo
+ * global_name:  nTECSInfo_tCallInfo_eCallInfo_getOptimizeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eCallInfo_getOptimizeInfo(CELLIDX idx, bool_t* b_VMT_useless, bool_t* b_skelton_useless, bool_t* b_cell_unique)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  *b_VMT_useless     = ATTR_b_VMT_useless;
+  *b_skelton_useless = ATTR_b_skelton_useless;
+  *b_cell_unique     = ATTR_b_cell_unique;
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCellInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCellInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCellInfo.c	(revision 374)
@@ -0,0 +1,251 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * cbp              void*            ATTR_cbp        
+ * inibp            void*            ATTR_inibp      
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cCelltypeInfo signature: nTECSInfo_sCelltypeInfo context:task
+ *   ER             cCelltypeInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cCelltypeInfo_getNameLength( );
+ *   uint32_t       cCelltypeInfo_getNAttr( );
+ *   ER             cCelltypeInfo_getAttrInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNVar( );
+ *   ER             cCelltypeInfo_getVarInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNCall( );
+ *   ER             cCelltypeInfo_getCallInfo( uint32_t ith, Descriptor( nTECSInfo_sCallInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNEntry( );
+ *   ER             cCelltypeInfo_getEntryInfo( uint32_t ith, Descriptor( nTECSInfo_sEntryInfo )* desc );
+ *   bool_t         cCelltypeInfo_isSingleton( );
+ *   bool_t         cCelltypeInfo_isIDX_is_ID( );
+ *   uint32_t       cCelltypeInfo_sizeOfCB( );
+ *   uint32_t       cCelltypeInfo_sizeOfINIB( );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sCelltypeInfo ) cCelltypeInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sCelltypeInfo ) cCelltypeInfo_ref_desc()      (same as above; abbreviated version);
+ * call port: cRawEntryDescriptor signature: nTECSInfo_sRawEntryDescriptorInfo context:task optional:true
+ *   bool_t     is_cRawEntryDescriptor_joined(int subscript)        check if joined
+ *   uint16_t       cRawEntryDescriptor_getNRawEntryDescriptorInfo( subscript );
+ *   ER             cRawEntryDescriptor_getRawDescriptor( subscript, const char_t* signatureName, int_t ith, void** rawDesc );
+ *       subscript:  0...(NCP_cRawEntryDescriptor-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sRawEntryDescriptorInfo ) cRawEntryDescriptor_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sRawEntryDescriptorInfo ) cRawEntryDescriptor_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tCellInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eCellInfo
+ * entry port: eCellInfo
+ * signature:  nTECSInfo_sCellInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eCellInfo_getName
+ * name:         eCellInfo_getName
+ * global_name:  nTECSInfo_tCellInfo_eCellInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eCellInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eCellInfo_getNameLength
+ * name:         eCellInfo_getNameLength
+ * global_name:  nTECSInfo_tCellInfo_eCellInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eCellInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eCellInfo_getNRawEntryDescriptorInfo
+ * name:         eCellInfo_getNRawEntryDescriptorInfo
+ * global_name:  nTECSInfo_tCellInfo_eCellInfo_getNRawEntryDescriptorInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eCellInfo_getNRawEntryDescriptorInfo(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return NCP_cRawEntryDescriptor;
+}
+
+/* #[<ENTRY_FUNC>]# eCellInfo_getRawEntryDescriptorInfo
+ * name:         eCellInfo_getRawEntryDescriptorInfo
+ * global_name:  nTECSInfo_tCellInfo_eCellInfo_getRawEntryDescriptorInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eCellInfo_getRawEntryDescriptorInfo(CELLIDX idx, int_t index, Descriptor( nTECSInfo_sRawEntryDescriptorInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+  ER      ercd = E_OK;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( 0 <= index && index < NCP_cRawEntryDescriptor ){
+      if( is_cRawEntryDescriptor_joined( index ) )
+          *desc = cRawEntryDescriptor_refer_to_descriptor( index );
+      else
+          ercd = E_NOEXS;
+  }
+  else
+      ercd = E_ID;
+
+  return ercd;
+}
+
+/* #[<ENTRY_FUNC>]# eCellInfo_getCelltypeInfo
+ * name:         eCellInfo_getCelltypeInfo
+ * global_name:  nTECSInfo_tCellInfo_eCellInfo_getCelltypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eCellInfo_getCelltypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sCelltypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *desc = cCelltypeInfo_refer_to_descriptor();
+}
+
+/* #[<ENTRY_FUNC>]# eCellInfo_getCBP
+ * name:         eCellInfo_getCBP
+ * global_name:  nTECSInfo_tCellInfo_eCellInfo_getCBP
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eCellInfo_getCBP(CELLIDX idx, void** cbp)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *cbp = ATTR_cbp;
+}
+
+/* #[<ENTRY_FUNC>]# eCellInfo_getINIBP
+ * name:         eCellInfo_getINIBP
+ * global_name:  nTECSInfo_tCellInfo_eCellInfo_getINIBP
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eCellInfo_getINIBP(CELLIDX idx, void** inibp)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *inibp = ATTR_inibp;
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCelltypeInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCelltypeInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCelltypeInfo.c	(revision 374)
@@ -0,0 +1,446 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * b_singleton      bool_t           ATTR_b_singleton
+ * b_IDX_is_ID_act  bool_t           ATTR_b_IDX_is_ID_act
+ * sizeOfCB         uint32_t         ATTR_sizeOfCB   
+ * sizeOfINIB       uint32_t         ATTR_sizeOfINIB 
+ * n_cellInLinkUnit uint32_t         ATTR_n_cellInLinkUnit
+ * n_cellInSystem   uint32_t         ATTR_n_cellInSystem
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cEntryInfo signature: nTECSInfo_sEntryInfo context:task optional:true
+ *   bool_t     is_cEntryInfo_joined(int subscript)        check if joined
+ *   ER             cEntryInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cEntryInfo_getNameLength( subscript );
+ *   void           cEntryInfo_getSignatureInfo( subscript, Descriptor( nTECSInfo_sSignatureInfo )* desc );
+ *   uint32_t       cEntryInfo_getArraySize( subscript );
+ *   bool_t         cEntryInfo_isInline( subscript );
+ *       subscript:  0...(NCP_cEntryInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sEntryInfo ) cEntryInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sEntryInfo ) cEntryInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ * call port: cCallInfo signature: nTECSInfo_sCallInfo context:task optional:true
+ *   bool_t     is_cCallInfo_joined(int subscript)        check if joined
+ *   ER             cCallInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cCallInfo_getNameLength( subscript );
+ *   void           cCallInfo_getSignatureInfo( subscript, Descriptor( nTECSInfo_sSignatureInfo )* desc );
+ *   uint32_t       cCallInfo_getArraySize( subscript );
+ *   void           cCallInfo_getSpecifierInfo( subscript, bool_t* b_optional, bool_t* b_dynamic, bool_t* b_ref_desc, bool_t* b_omit );
+ *   void           cCallInfo_getInternalInfo( subscript, bool_t* b_allocator_port, bool_t* b_require_port );
+ *   void           cCallInfo_getLocationInfo( subscript, uint32_t* offset, int8_t* place );
+ *   void           cCallInfo_getOptimizeInfo( subscript, bool_t* b_VMT_useless, bool_t* b_skelton_useless, bool_t* b_cell_unique );
+ *       subscript:  0...(NCP_cCallInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sCallInfo ) cCallInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sCallInfo ) cCallInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ * call port: cAttrInfo signature: nTECSInfo_sVarDeclInfo context:task optional:true
+ *   bool_t     is_cAttrInfo_joined(int subscript)        check if joined
+ *   ER             cAttrInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cAttrInfo_getNameLength( subscript );
+ *   uint32_t       cAttrInfo_getOffset( subscript );
+ *   void           cAttrInfo_getTypeInfo( subscript, Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   void           cAttrInfo_getSizeIsExpr( subscript, char_t* expr_str, int32_t max_len );
+ *   ER             cAttrInfo_getSizeIs( subscript, uint32_t* size, const void* p_cb );
+ *       subscript:  0...(NCP_cAttrInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sVarDeclInfo ) cAttrInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sVarDeclInfo ) cAttrInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ * call port: cVarInfo signature: nTECSInfo_sVarDeclInfo context:task optional:true
+ *   bool_t     is_cVarInfo_joined(int subscript)        check if joined
+ *   ER             cVarInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cVarInfo_getNameLength( subscript );
+ *   uint32_t       cVarInfo_getOffset( subscript );
+ *   void           cVarInfo_getTypeInfo( subscript, Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   void           cVarInfo_getSizeIsExpr( subscript, char_t* expr_str, int32_t max_len );
+ *   ER             cVarInfo_getSizeIs( subscript, uint32_t* size, const void* p_cb );
+ *       subscript:  0...(NCP_cVarInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sVarDeclInfo ) cVarInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sVarDeclInfo ) cVarInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tCelltypeInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eCelltypeInfo
+ * entry port: eCelltypeInfo
+ * signature:  nTECSInfo_sCelltypeInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_getName
+ * name:         eCelltypeInfo_getName
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eCelltypeInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+    ER		ercd = E_OK;
+    CELLCB	*p_cellcb;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        return(E_ID);
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    name[ max_len - 1 ] = '\0';
+    strncpy( name, ATTR_name, max_len );
+    if( name[ max_len - 1 ] ){
+        name[ max_len - 1 ] = '\0';
+        ercd = E_NOMEM;
+    }
+
+    return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_getNameLength
+ * name:         eCelltypeInfo_getNameLength
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eCelltypeInfo_getNameLength(CELLIDX idx)
+{
+    CELLCB	*p_cellcb;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* Write error processing code here */
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_getNAttr
+ * name:         eCelltypeInfo_getNAttr
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_getNAttr
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eCelltypeInfo_getNAttr(CELLIDX idx)
+{
+    CELLCB	*p_cellcb;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* Write error processing code here */
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    return NCP_cAttrInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_getAttrInfo
+ * name:         eCelltypeInfo_getAttrInfo
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_getAttrInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eCelltypeInfo_getAttrInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc)
+{
+    CELLCB	*p_cellcb;
+    ER      ercd = E_OK;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* Write error processing code here */
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    if( 0 <= ith && ith < NCP_cAttrInfo ){
+        if( is_cAttrInfo_joined( ith ) )
+            *desc = cAttrInfo_refer_to_descriptor( ith );
+        else
+            ercd = E_NOEXS;
+    }
+    else
+        ercd = E_ID;
+    return ercd;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_getNVar
+ * name:         eCelltypeInfo_getNVar
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_getNVar
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eCelltypeInfo_getNVar(CELLIDX idx)
+{
+    CELLCB	*p_cellcb;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* Write error processing code here */
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    return NCP_cVarInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_getVarInfo
+ * name:         eCelltypeInfo_getVarInfo
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_getVarInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eCelltypeInfo_getVarInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc)
+{
+    CELLCB	*p_cellcb;
+    ER      ercd = E_OK;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* Write error processing code here */
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    if( 0 <= ith &&  ith < NCP_cVarInfo ){
+        if( is_cVarInfo_joined( ith ) )
+            *desc = cVarInfo_refer_to_descriptor( ith );
+        else
+            ercd = E_NOEXS;
+    }
+    else
+        ercd = E_ID;
+    return ercd;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_getNCall
+ * name:         eCelltypeInfo_getNCall
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_getNCall
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eCelltypeInfo_getNCall(CELLIDX idx)
+{
+    CELLCB	*p_cellcb;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* Write error processing code here */
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    return NCP_cCallInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_getCallInfo
+ * name:         eCelltypeInfo_getCallInfo
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_getCallInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eCelltypeInfo_getCallInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sCallInfo )* desc)
+{
+    CELLCB	*p_cellcb;
+    ER      ercd = E_OK;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* Write error processing code here */
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    if( 0 <= ith && ith < NCP_cCallInfo ){
+        if( is_cCallInfo_joined( ith ) )
+            *desc = cCallInfo_refer_to_descriptor( ith );
+        else
+            ercd = E_NOEXS;
+    }
+    else
+        ercd = E_ID;
+
+    return ercd;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_getNEntry
+ * name:         eCelltypeInfo_getNEntry
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_getNEntry
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eCelltypeInfo_getNEntry(CELLIDX idx)
+{
+    CELLCB	*p_cellcb;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* Write error processing code here */
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    return NCP_cEntryInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_getEntryInfo
+ * name:         eCelltypeInfo_getEntryInfo
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_getEntryInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eCelltypeInfo_getEntryInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sEntryInfo )* desc)
+{
+    CELLCB	*p_cellcb;
+    ER      ercd = E_OK;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* Write error processing code here */
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    if( 0 <= ith && ith < NCP_cEntryInfo ){
+        if( is_cEntryInfo_joined( ith ) )
+            *desc = cEntryInfo_refer_to_descriptor( ith );
+        else
+            ercd = E_NOEXS;
+    }
+    else
+        ercd = E_ID;
+
+    return ercd;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_isSingleton
+ * name:         eCelltypeInfo_isSingleton
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_isSingleton
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+bool_t
+eCelltypeInfo_isSingleton(CELLIDX idx)
+{
+    CELLCB	*p_cellcb;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* Write error processing code here */
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    return ATTR_b_singleton;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_isIDX_is_ID
+ * name:         eCelltypeInfo_isIDX_is_ID
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_isIDX_is_ID
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+bool_t
+eCelltypeInfo_isIDX_is_ID(CELLIDX idx)
+{
+    CELLCB	*p_cellcb;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* Write error processing code here */
+    } /* end if VALID_IDX(idx) */
+
+    /* Put statements here #_TEFB_# */
+    return ATTR_b_IDX_is_ID_act;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_sizeOfCB
+ * name:         eCelltypeInfo_sizeOfCB
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_sizeOfCB
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eCelltypeInfo_sizeOfCB(CELLIDX idx)
+{
+    CELLCB	*p_cellcb;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* エラー処理コードをここに記述します */
+    } /* end if VALID_IDX(idx) */
+
+    /* ここに処理本体を記述します #_TEFB_# */
+    return ATTR_sizeOfCB;
+}
+
+/* #[<ENTRY_FUNC>]# eCelltypeInfo_sizeOfINIB
+ * name:         eCelltypeInfo_sizeOfINIB
+ * global_name:  nTECSInfo_tCelltypeInfo_eCelltypeInfo_sizeOfINIB
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eCelltypeInfo_sizeOfINIB(CELLIDX idx)
+{
+    CELLCB	*p_cellcb;
+    if (VALID_IDX(idx)) {
+        p_cellcb = GET_CELLCB(idx);
+    }
+    else {
+        /* エラー処理コードをここに記述します */
+    } /* end if VALID_IDX(idx) */
+
+    /* ここに処理本体を記述します #_TEFB_# */
+    return ATTR_sizeOfINIB;
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDefinedTypeInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDefinedTypeInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDefinedTypeInfo.c	(revision 374)
@@ -0,0 +1,255 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * typeKind         int8_t           ATTR_typeKind   
+ * size             uint32_t         ATTR_size       
+ * b_const          bool_t           ATTR_b_const    
+ * b_volatile       bool_t           ATTR_b_volatile 
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task
+ *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cTypeInfo_getNameLength( );
+ *   uint32_t       cTypeInfo_getSize( );
+ *   int8_t         cTypeInfo_getKind( );
+ *   uint32_t       cTypeInfo_getNType( );
+ *   ER             cTypeInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   uint32_t       cTypeInfo_getNMember( );
+ *   ER             cTypeInfo_getMemberInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_ref_desc()      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tDefinedTypeInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTypeInfo
+ * entry port: eTypeInfo
+ * signature:  nTECSInfo_sTypeInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getName
+ * name:         eTypeInfo_getName
+ * global_name:  nTECSInfo_tDefinedTypeInfo_eTypeInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNameLength
+ * name:         eTypeInfo_getNameLength
+ * global_name:  nTECSInfo_tDefinedTypeInfo_eTypeInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eTypeInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getSize
+ * name:         eTypeInfo_getSize
+ * global_name:  nTECSInfo_tDefinedTypeInfo_eTypeInfo_getSize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getSize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return cTypeInfo_getSize();
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getKind
+ * name:         eTypeInfo_getKind
+ * global_name:  nTECSInfo_tDefinedTypeInfo_eTypeInfo_getKind
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+int8_t
+eTypeInfo_getKind(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return TECSTypeKind_DefinedType;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNType
+ * name:         eTypeInfo_getNType
+ * global_name:  nTECSInfo_tDefinedTypeInfo_eTypeInfo_getNType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNType(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return 1;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getTypeInfo
+ * name:         eTypeInfo_getTypeInfo
+ * global_name:  nTECSInfo_tDefinedTypeInfo_eTypeInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  /*
+   * ith == 0 is valid, others are invalid.
+   * but this function always returns valid value
+   */
+  *desc = cTypeInfo_refer_to_descriptor();
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNMember
+ * name:         eTypeInfo_getNMember
+ * global_name:  nTECSInfo_tDefinedTypeInfo_eTypeInfo_getNMember
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNMember(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getMemberInfo
+ * name:         eTypeInfo_getMemberInfo
+ * global_name:  nTECSInfo_tDefinedTypeInfo_eTypeInfo_getMemberInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getMemberInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDescriptorTypeInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDescriptorTypeInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDescriptorTypeInfo.c	(revision 374)
@@ -0,0 +1,247 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * typeKind         int8_t           ATTR_typeKind   
+ * size             uint32_t         ATTR_size       
+ * b_const          bool_t           ATTR_b_const    
+ * b_volatile       bool_t           ATTR_b_volatile 
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cSignatureInfo signature: nTECSInfo_sSignatureInfo context:task
+ *   ER             cSignatureInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cSignatureInfo_getNameLength( );
+ *   uint32_t       cSignatureInfo_getNFunction( );
+ *   ER             cSignatureInfo_getFunctionInfo( uint32_t ith, Descriptor( nTECSInfo_sFunctionInfo )* desc );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sSignatureInfo ) cSignatureInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sSignatureInfo ) cSignatureInfo_ref_desc()      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tDescriptorTypeInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTypeInfo
+ * entry port: eTypeInfo
+ * signature:  nTECSInfo_sTypeInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getName
+ * name:         eTypeInfo_getName
+ * global_name:  nTECSInfo_tDescriptorTypeInfo_eTypeInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNameLength
+ * name:         eTypeInfo_getNameLength
+ * global_name:  nTECSInfo_tDescriptorTypeInfo_eTypeInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eTypeInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getSize
+ * name:         eTypeInfo_getSize
+ * global_name:  nTECSInfo_tDescriptorTypeInfo_eTypeInfo_getSize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getSize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return ATTR_size;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getKind
+ * name:         eTypeInfo_getKind
+ * global_name:  nTECSInfo_tDescriptorTypeInfo_eTypeInfo_getKind
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+int8_t
+eTypeInfo_getKind(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return TECSTypeKind_DescriptorType;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNType
+ * name:         eTypeInfo_getNType
+ * global_name:  nTECSInfo_tDescriptorTypeInfo_eTypeInfo_getNType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNType(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return 0;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getTypeInfo
+ * name:         eTypeInfo_getTypeInfo
+ * global_name:  nTECSInfo_tDescriptorTypeInfo_eTypeInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return E_NOEXS;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNMember
+ * name:         eTypeInfo_getNMember
+ * global_name:  nTECSInfo_tDescriptorTypeInfo_eTypeInfo_getNMember
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNMember(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getMemberInfo
+ * name:         eTypeInfo_getMemberInfo
+ * global_name:  nTECSInfo_tDescriptorTypeInfo_eTypeInfo_getMemberInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getMemberInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tEntryInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tEntryInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tEntryInfo.c	(revision 374)
@@ -0,0 +1,183 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * b_inline         bool_t           ATTR_b_inline   
+ * array_size       uint32_t         ATTR_array_size 
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cSignatureInfo signature: nTECSInfo_sSignatureInfo context:task
+ *   ER             cSignatureInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cSignatureInfo_getNameLength( );
+ *   uint32_t       cSignatureInfo_getNFunction( );
+ *   ER             cSignatureInfo_getFunctionInfo( uint32_t ith, Descriptor( nTECSInfo_sFunctionInfo )* desc );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sSignatureInfo ) cSignatureInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sSignatureInfo ) cSignatureInfo_ref_desc()      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tEntryInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eEntryInfo
+ * entry port: eEntryInfo
+ * signature:  nTECSInfo_sEntryInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eEntryInfo_getName
+ * name:         eEntryInfo_getName
+ * global_name:  nTECSInfo_tEntryInfo_eEntryInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eEntryInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eEntryInfo_getNameLength
+ * name:         eEntryInfo_getNameLength
+ * global_name:  nTECSInfo_tEntryInfo_eEntryInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eEntryInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eEntryInfo_getSignatureInfo
+ * name:         eEntryInfo_getSignatureInfo
+ * global_name:  nTECSInfo_tEntryInfo_eEntryInfo_getSignatureInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eEntryInfo_getSignatureInfo(CELLIDX idx, Descriptor( nTECSInfo_sSignatureInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *desc = cSignatureInfo_refer_to_descriptor();
+}
+
+/* #[<ENTRY_FUNC>]# eEntryInfo_getArraySize
+ * name:         eEntryInfo_getArraySize
+ * global_name:  nTECSInfo_tEntryInfo_eEntryInfo_getArraySize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eEntryInfo_getArraySize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return ATTR_array_size;
+}
+
+/* #[<ENTRY_FUNC>]# eEntryInfo_isInline
+ * name:         eEntryInfo_isInline
+ * global_name:  nTECSInfo_tEntryInfo_eEntryInfo_isInline
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+bool_t
+eEntryInfo_isInline(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return ATTR_b_inline;
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFloatTypeInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFloatTypeInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFloatTypeInfo.c	(revision 374)
@@ -0,0 +1,237 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * typeKind         int8_t           ATTR_typeKind   
+ * size             uint32_t         ATTR_size       
+ * b_const          bool_t           ATTR_b_const    
+ * b_volatile       bool_t           ATTR_b_volatile 
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tFloatTypeInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTypeInfo
+ * entry port: eTypeInfo
+ * signature:  nTECSInfo_sTypeInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getName
+ * name:         eTypeInfo_getName
+ * global_name:  nTECSInfo_tFloatTypeInfo_eTypeInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNameLength
+ * name:         eTypeInfo_getNameLength
+ * global_name:  nTECSInfo_tFloatTypeInfo_eTypeInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eTypeInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getSize
+ * name:         eTypeInfo_getSize
+ * global_name:  nTECSInfo_tFloatTypeInfo_eTypeInfo_getSize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getSize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return ATTR_size;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getKind
+ * name:         eTypeInfo_getKind
+ * global_name:  nTECSInfo_tFloatTypeInfo_eTypeInfo_getKind
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+int8_t
+eTypeInfo_getKind(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return TECSTypeKind_FloatType;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNType
+ * name:         eTypeInfo_getNType
+ * global_name:  nTECSInfo_tFloatTypeInfo_eTypeInfo_getNType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNType(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return 0;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getTypeInfo
+ * name:         eTypeInfo_getTypeInfo
+ * global_name:  nTECSInfo_tFloatTypeInfo_eTypeInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return E_NOEXS;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNMember
+ * name:         eTypeInfo_getNMember
+ * global_name:  nTECSInfo_tFloatTypeInfo_eTypeInfo_getNMember
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNMember(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getMemberInfo
+ * name:         eTypeInfo_getMemberInfo
+ * global_name:  nTECSInfo_tFloatTypeInfo_eTypeInfo_getMemberInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getMemberInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFunctionInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFunctionInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFunctionInfo.c	(revision 374)
@@ -0,0 +1,200 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * bOneway          bool_t           ATTR_bOneway    
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cParamInfo signature: nTECSInfo_sParamInfo context:task optional:true
+ *   bool_t     is_cParamInfo_joined(int subscript)        check if joined
+ *   ER             cParamInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cParamInfo_getNameLength( subscript );
+ *   ER             cParamInfo_getTypeInfo( subscript, Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *       subscript:  0...(NCP_cParamInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sParamInfo ) cParamInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sParamInfo ) cParamInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ * call port: cReturnTypeInfo signature: nTECSInfo_sTypeInfo context:task
+ *   ER             cReturnTypeInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cReturnTypeInfo_getNameLength( );
+ *   uint32_t       cReturnTypeInfo_getSize( );
+ *   int8_t         cReturnTypeInfo_getKind( );
+ *   uint32_t       cReturnTypeInfo_getNType( );
+ *   ER             cReturnTypeInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   uint32_t       cReturnTypeInfo_getNMember( );
+ *   ER             cReturnTypeInfo_getMemberInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sTypeInfo ) cReturnTypeInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sTypeInfo ) cReturnTypeInfo_ref_desc()      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tFunctionInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eFunctionInfo
+ * entry port: eFunctionInfo
+ * signature:  nTECSInfo_sFunctionInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eFunctionInfo_getName
+ * name:         eFunctionInfo_getName
+ * global_name:  nTECSInfo_tFunctionInfo_eFunctionInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eFunctionInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eFunctionInfo_getNameLength
+ * name:         eFunctionInfo_getNameLength
+ * global_name:  nTECSInfo_tFunctionInfo_eFunctionInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eFunctionInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eFunctionInfo_getReturnTypeInfo
+ * name:         eFunctionInfo_getReturnTypeInfo
+ * global_name:  nTECSInfo_tFunctionInfo_eFunctionInfo_getReturnTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eFunctionInfo_getReturnTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *desc = cReturnTypeInfo_refer_to_descriptor();
+}
+
+/* #[<ENTRY_FUNC>]# eFunctionInfo_getNParam
+ * name:         eFunctionInfo_getNParam
+ * global_name:  nTECSInfo_tFunctionInfo_eFunctionInfo_getNParam
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eFunctionInfo_getNParam(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return NCP_cParamInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eFunctionInfo_getParamInfo
+ * name:         eFunctionInfo_getParamInfo
+ * global_name:  nTECSInfo_tFunctionInfo_eFunctionInfo_getParamInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eFunctionInfo_getParamInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sParamInfo )* param)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  if( ith >= NCP_cParamInfo )
+      ercd = E_NOEXS;
+  else
+      *param = cParamInfo_refer_to_descriptor( ith );
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tIntTypeInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tIntTypeInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tIntTypeInfo.c	(revision 374)
@@ -0,0 +1,237 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * typeKind         int8_t           ATTR_typeKind   
+ * size             uint32_t         ATTR_size       
+ * b_const          bool_t           ATTR_b_const    
+ * b_volatile       bool_t           ATTR_b_volatile 
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tIntTypeInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTypeInfo
+ * entry port: eTypeInfo
+ * signature:  nTECSInfo_sTypeInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getName
+ * name:         eTypeInfo_getName
+ * global_name:  nTECSInfo_tIntTypeInfo_eTypeInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNameLength
+ * name:         eTypeInfo_getNameLength
+ * global_name:  nTECSInfo_tIntTypeInfo_eTypeInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eTypeInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getSize
+ * name:         eTypeInfo_getSize
+ * global_name:  nTECSInfo_tIntTypeInfo_eTypeInfo_getSize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getSize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return ATTR_size;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getKind
+ * name:         eTypeInfo_getKind
+ * global_name:  nTECSInfo_tIntTypeInfo_eTypeInfo_getKind
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+int8_t
+eTypeInfo_getKind(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return TECSTypeKind_IntType;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNType
+ * name:         eTypeInfo_getNType
+ * global_name:  nTECSInfo_tIntTypeInfo_eTypeInfo_getNType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNType(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return 0;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getTypeInfo
+ * name:         eTypeInfo_getTypeInfo
+ * global_name:  nTECSInfo_tIntTypeInfo_eTypeInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return E_NOEXS;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNMember
+ * name:         eTypeInfo_getNMember
+ * global_name:  nTECSInfo_tIntTypeInfo_eTypeInfo_getNMember
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNMember(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getMemberInfo
+ * name:         eTypeInfo_getMemberInfo
+ * global_name:  nTECSInfo_tIntTypeInfo_eTypeInfo_getMemberInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getMemberInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tNamespaceInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tNamespaceInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tNamespaceInfo.c	(revision 374)
@@ -0,0 +1,277 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char*            ATTR_name       
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cSignatureInfo signature: nTECSInfo_sSignatureInfo context:task optional:true
+ *   bool_t     is_cSignatureInfo_joined(int subscript)        check if joined
+ *   ER             cSignatureInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cSignatureInfo_getNameLength( subscript );
+ *   uint32_t       cSignatureInfo_getNFunction( subscript );
+ *   ER             cSignatureInfo_getFunctionInfo( subscript, uint32_t ith, Descriptor( nTECSInfo_sFunctionInfo )* desc );
+ *       subscript:  0...(NCP_cSignatureInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sSignatureInfo ) cSignatureInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sSignatureInfo ) cSignatureInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ * call port: cCelltypeInfo signature: nTECSInfo_sCelltypeInfo context:task optional:true
+ *   bool_t     is_cCelltypeInfo_joined(int subscript)        check if joined
+ *   ER             cCelltypeInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cCelltypeInfo_getNameLength( subscript );
+ *   uint32_t       cCelltypeInfo_getNAttr( subscript );
+ *   ER             cCelltypeInfo_getAttrInfo( subscript, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNVar( subscript );
+ *   ER             cCelltypeInfo_getVarInfo( subscript, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNCall( subscript );
+ *   ER             cCelltypeInfo_getCallInfo( subscript, uint32_t ith, Descriptor( nTECSInfo_sCallInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNEntry( subscript );
+ *   ER             cCelltypeInfo_getEntryInfo( subscript, uint32_t ith, Descriptor( nTECSInfo_sEntryInfo )* desc );
+ *   bool_t         cCelltypeInfo_isSingleton( subscript );
+ *   bool_t         cCelltypeInfo_isIDX_is_ID( subscript );
+ *   uint32_t       cCelltypeInfo_sizeOfCB( subscript );
+ *   uint32_t       cCelltypeInfo_sizeOfINIB( subscript );
+ *       subscript:  0...(NCP_cCelltypeInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sCelltypeInfo ) cCelltypeInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sCelltypeInfo ) cCelltypeInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ * call port: cNamespaceInfo signature: nTECSInfo_sNamespaceInfo context:task optional:true
+ *   bool_t     is_cNamespaceInfo_joined(int subscript)        check if joined
+ *   ER             cNamespaceInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cNamespaceInfo_getNameLength( subscript );
+ *   uint32_t       cNamespaceInfo_getNNamespace( subscript );
+ *   ER             cNamespaceInfo_getNamespaceInfo( subscript, uint32_t ith, Descriptor( nTECSInfo_sNamespaceInfo )* des );
+ *   uint32_t       cNamespaceInfo_getNSignature( subscript );
+ *   ER             cNamespaceInfo_getSignatureInfo( subscript, uint32_t ith, Descriptor( nTECSInfo_sSignatureInfo )* des );
+ *   uint32_t       cNamespaceInfo_getNCelltype( subscript );
+ *   ER             cNamespaceInfo_getCelltypeInfo( subscript, uint32_t ith, Descriptor( nTECSInfo_sCelltypeInfo )* des );
+ *       subscript:  0...(NCP_cNamespaceInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sNamespaceInfo ) cNamespaceInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sNamespaceInfo ) cNamespaceInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tNamespaceInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eNamespaceInfo
+ * entry port: eNamespaceInfo
+ * signature:  nTECSInfo_sNamespaceInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eNamespaceInfo_getName
+ * name:         eNamespaceInfo_getName
+ * global_name:  nTECSInfo_tNamespaceInfo_eNamespaceInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eNamespaceInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eNamespaceInfo_getNameLength
+ * name:         eNamespaceInfo_getNameLength
+ * global_name:  nTECSInfo_tNamespaceInfo_eNamespaceInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eNamespaceInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eNamespaceInfo_getNNamespace
+ * name:         eNamespaceInfo_getNNamespace
+ * global_name:  nTECSInfo_tNamespaceInfo_eNamespaceInfo_getNNamespace
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eNamespaceInfo_getNNamespace(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return NCP_cNamespaceInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eNamespaceInfo_getNamespaceInfo
+ * name:         eNamespaceInfo_getNamespaceInfo
+ * global_name:  nTECSInfo_tNamespaceInfo_eNamespaceInfo_getNamespaceInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eNamespaceInfo_getNamespaceInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sNamespaceInfo )* des)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *des = cNamespaceInfo_refer_to_descriptor( ith );
+}
+
+/* #[<ENTRY_FUNC>]# eNamespaceInfo_getNSignature
+ * name:         eNamespaceInfo_getNSignature
+ * global_name:  nTECSInfo_tNamespaceInfo_eNamespaceInfo_getNSignature
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eNamespaceInfo_getNSignature(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return NCP_cSignatureInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eNamespaceInfo_getSignatureInfo
+ * name:         eNamespaceInfo_getSignatureInfo
+ * global_name:  nTECSInfo_tNamespaceInfo_eNamespaceInfo_getSignatureInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eNamespaceInfo_getSignatureInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sSignatureInfo )* des)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	*des = cSignatureInfo_refer_to_descriptor( ith );
+}
+
+/* #[<ENTRY_FUNC>]# eNamespaceInfo_getNCelltype
+ * name:         eNamespaceInfo_getNCelltype
+ * global_name:  nTECSInfo_tNamespaceInfo_eNamespaceInfo_getNCelltype
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eNamespaceInfo_getNCelltype(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return NCP_cCelltypeInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eNamespaceInfo_getCelltypeInfo
+ * name:         eNamespaceInfo_getCelltypeInfo
+ * global_name:  nTECSInfo_tNamespaceInfo_eNamespaceInfo_getCelltypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eNamespaceInfo_getCelltypeInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sCelltypeInfo )* des)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	*des = cCelltypeInfo_refer_to_descriptor( ith );
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tParamInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tParamInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tParamInfo.c	(revision 374)
@@ -0,0 +1,174 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * dir              int8_t           ATTR_dir        
+ * sizeIsExpr       char_t*          ATTR_sizeIsExpr 
+ * countIsExpr      char_t*          ATTR_countIsExpr
+ * stringExpr       char_t*          ATTR_stringExpr 
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task
+ *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cTypeInfo_getNameLength( );
+ *   uint32_t       cTypeInfo_getSize( );
+ *   int8_t         cTypeInfo_getKind( );
+ *   uint32_t       cTypeInfo_getNType( );
+ *   ER             cTypeInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   uint32_t       cTypeInfo_getNMember( );
+ *   ER             cTypeInfo_getMemberInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_ref_desc()      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tParamInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eParamInfo
+ * entry port: eParamInfo
+ * signature:  nTECSInfo_sParamInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eParamInfo_getName
+ * name:         eParamInfo_getName
+ * global_name:  nTECSInfo_tParamInfo_eParamInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eParamInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eParamInfo_getNameLength
+ * name:         eParamInfo_getNameLength
+ * global_name:  nTECSInfo_tParamInfo_eParamInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eParamInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eParamInfo_getTypeInfo
+ * name:         eParamInfo_getTypeInfo
+ * global_name:  nTECSInfo_tParamInfo_eParamInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eParamInfo_getTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *desc = cTypeInfo_refer_to_descriptor();
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eParamInfo_getDir
+ * name:         eParamInfo_getDir
+ * global_name:  nTECSInfo_tParamInfo_eParamInfo_getDir
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eParamInfo_getDir(CELLIDX idx, int8_t *dir)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *dir = ATTR_dir;
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tPtrTypeInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tPtrTypeInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tPtrTypeInfo.c	(revision 374)
@@ -0,0 +1,251 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * typeKind         int8_t           ATTR_typeKind   
+ * size             uint32_t         ATTR_size       
+ * b_const          bool_t           ATTR_b_const    
+ * b_volatile       bool_t           ATTR_b_volatile 
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task
+ *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cTypeInfo_getNameLength( );
+ *   uint32_t       cTypeInfo_getSize( );
+ *   int8_t         cTypeInfo_getKind( );
+ *   uint32_t       cTypeInfo_getNType( );
+ *   ER             cTypeInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   uint32_t       cTypeInfo_getNMember( );
+ *   ER             cTypeInfo_getMemberInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_ref_desc()      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tPtrTypeInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTypeInfo
+ * entry port: eTypeInfo
+ * signature:  nTECSInfo_sTypeInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getName
+ * name:         eTypeInfo_getName
+ * global_name:  nTECSInfo_tPtrTypeInfo_eTypeInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNameLength
+ * name:         eTypeInfo_getNameLength
+ * global_name:  nTECSInfo_tPtrTypeInfo_eTypeInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eTypeInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getSize
+ * name:         eTypeInfo_getSize
+ * global_name:  nTECSInfo_tPtrTypeInfo_eTypeInfo_getSize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getSize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return ATTR_size;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getKind
+ * name:         eTypeInfo_getKind
+ * global_name:  nTECSInfo_tPtrTypeInfo_eTypeInfo_getKind
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+int8_t
+eTypeInfo_getKind(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return TECSTypeKind_PtrType;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNType
+ * name:         eTypeInfo_getNType
+ * global_name:  nTECSInfo_tPtrTypeInfo_eTypeInfo_getNType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNType(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return 1;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getTypeInfo
+ * name:         eTypeInfo_getTypeInfo
+ * global_name:  nTECSInfo_tPtrTypeInfo_eTypeInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  *desc = cTypeInfo_refer_to_descriptor();
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNMember
+ * name:         eTypeInfo_getNMember
+ * global_name:  nTECSInfo_tPtrTypeInfo_eTypeInfo_getNMember
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNMember(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getMemberInfo
+ * name:         eTypeInfo_getMemberInfo
+ * global_name:  nTECSInfo_tPtrTypeInfo_eTypeInfo_getMemberInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getMemberInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRawEntryDescriptorInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRawEntryDescriptorInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRawEntryDescriptorInfo.c	(revision 374)
@@ -0,0 +1,75 @@
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * size             int_t            ATTR_size       
+ * rawEntryDescriptor void**           ATTR_rawEntryDescriptor
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include "nTECSInfo_tRawEntryDescriptorInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eRawEntryDescriptor
+ * entry port: eRawEntryDescriptor
+ * signature:  nTECSInfo_sRawEntryDescriptorInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eRawEntryDescriptor_getNRawEntryDescriptorInfo
+ * name:         eRawEntryDescriptor_getNRawEntryDescriptorInfo
+ * global_name:  nTECSInfo_tRawEntryDescriptorInfo_eRawEntryDescriptor_getNRawEntryDescriptorInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eRawEntryDescriptor_getNRawEntryDescriptorInfo(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eRawEntryDescriptor_getRawDescriptor
+ * name:         eRawEntryDescriptor_getRawDescriptor
+ * global_name:  nTECSInfo_tRawEntryDescriptorInfo_eRawEntryDescriptor_getRawDescriptor
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eRawEntryDescriptor_getRawDescriptor(CELLIDX idx, int_t ith, void** rawDesc)
+{
+	CELLCB	*p_cellcb;
+  ER      ercd = E_OK;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( 0 <= ith && ith < ATTR_size ){
+      *rawDesc = ATTR_rawEntryDescriptor[ ith ];
+  }
+  else {
+      ercd = E_ID;
+  }
+  return ercd;
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRegionInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRegionInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRegionInfo.c	(revision 374)
@@ -0,0 +1,216 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char*            ATTR_name       
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cCellInfo signature: nTECSInfo_sCellInfo context:task optional:true
+ *   bool_t     is_cCellInfo_joined(int subscript)        check if joined
+ *   ER             cCellInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cCellInfo_getNameLength( subscript );
+ *   void           cCellInfo_getCelltypeInfo( subscript, Descriptor( nTECSInfo_sCelltypeInfo )* desc );
+ *   void           cCellInfo_getCBP( subscript, void** cbp );
+ *   void           cCellInfo_getINIBP( subscript, void** inibp );
+ *       subscript:  0...(NCP_cCellInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sCellInfo ) cCellInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sCellInfo ) cCellInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ * call port: cRegionInfo signature: nTECSInfo_sRegionInfo context:task optional:true
+ *   bool_t     is_cRegionInfo_joined(int subscript)        check if joined
+ *   ER             cRegionInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cRegionInfo_getNameLength( subscript );
+ *   uint32_t       cRegionInfo_getNCell( subscript );
+ *   ER             cRegionInfo_getCellInfo( subscript, uint32_t ith, Descriptor( nTECSInfo_sCellInfo )* des );
+ *   uint32_t       cRegionInfo_getNRegion( subscript );
+ *   ER             cRegionInfo_getRegionInfo( subscript, uint32_t ith, Descriptor( nTECSInfo_sRegionInfo )* des );
+ *       subscript:  0...(NCP_cRegionInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sRegionInfo ) cRegionInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sRegionInfo ) cRegionInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tRegionInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eRegionInfo
+ * entry port: eRegionInfo
+ * signature:  nTECSInfo_sRegionInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eRegionInfo_getName
+ * name:         eRegionInfo_getName
+ * global_name:  nTECSInfo_tRegionInfo_eRegionInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eRegionInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eRegionInfo_getNameLength
+ * name:         eRegionInfo_getNameLength
+ * global_name:  nTECSInfo_tRegionInfo_eRegionInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eRegionInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eRegionInfo_getNCell
+ * name:         eRegionInfo_getNCell
+ * global_name:  nTECSInfo_tRegionInfo_eRegionInfo_getNCell
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eRegionInfo_getNCell(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return NCP_cCellInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eRegionInfo_getCellInfo
+ * name:         eRegionInfo_getCellInfo
+ * global_name:  nTECSInfo_tRegionInfo_eRegionInfo_getCellInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eRegionInfo_getCellInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sCellInfo )* des)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *des = cCellInfo_refer_to_descriptor( ith );
+}
+
+/* #[<ENTRY_FUNC>]# eRegionInfo_getNRegion
+ * name:         eRegionInfo_getNRegion
+ * global_name:  nTECSInfo_tRegionInfo_eRegionInfo_getNRegion
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eRegionInfo_getNRegion(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return NCP_cRegionInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eRegionInfo_getRegionInfo
+ * name:         eRegionInfo_getRegionInfo
+ * global_name:  nTECSInfo_tRegionInfo_eRegionInfo_getRegionInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eRegionInfo_getRegionInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sRegionInfo )* des)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *des = cRegionInfo_refer_to_descriptor( ith );
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tSignatureInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tSignatureInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tSignatureInfo.c	(revision 374)
@@ -0,0 +1,165 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char*            ATTR_name       
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cFunctionInfo signature: nTECSInfo_sFunctionInfo context:task optional:true
+ *   bool_t     is_cFunctionInfo_joined(int subscript)        check if joined
+ *   ER             cFunctionInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cFunctionInfo_getNameLength( subscript );
+ *   void           cFunctionInfo_getReturnTypeInfo( subscript, Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   uint32_t       cFunctionInfo_getNParam( subscript );
+ *   ER             cFunctionInfo_getParamInfo( subscript, uint32_t ith, Descriptor( nTECSInfo_sParamInfo )* param );
+ *       subscript:  0...(NCP_cFunctionInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sFunctionInfo ) cFunctionInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sFunctionInfo ) cFunctionInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tSignatureInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eSignatureInfo
+ * entry port: eSignatureInfo
+ * signature:  nTECSInfo_sSignatureInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eSignatureInfo_getName
+ * name:         eSignatureInfo_getName
+ * global_name:  nTECSInfo_tSignatureInfo_eSignatureInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSignatureInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSignatureInfo_getNameLength
+ * name:         eSignatureInfo_getNameLength
+ * global_name:  nTECSInfo_tSignatureInfo_eSignatureInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eSignatureInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+      /* 終端文字 (NULL) を含む */
+}
+
+/* #[<ENTRY_FUNC>]# eSignatureInfo_getNFunction
+ * name:         eSignatureInfo_getNFunction
+ * global_name:  nTECSInfo_tSignatureInfo_eSignatureInfo_getNFunction
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eSignatureInfo_getNFunction(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return NCP_cFunctionInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eSignatureInfo_getFunctionInfo
+ * name:         eSignatureInfo_getFunctionInfo
+ * global_name:  nTECSInfo_tSignatureInfo_eSignatureInfo_getFunctionInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSignatureInfo_getFunctionInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sFunctionInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  *desc = cFunctionInfo_ref_desc( ith );
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tStructTypeInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tStructTypeInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tStructTypeInfo.c	(revision 374)
@@ -0,0 +1,255 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * typeKind         int8_t           ATTR_typeKind   
+ * size             uint32_t         ATTR_size       
+ * b_const          bool_t           ATTR_b_const    
+ * b_volatile       bool_t           ATTR_b_volatile 
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cVarDeclInfo signature: nTECSInfo_sVarDeclInfo context:task
+ *   ER             cVarDeclInfo_getName( subscript, char_t* name, int_t max_len );
+ *   uint16_t       cVarDeclInfo_getNameLength( subscript );
+ *   uint32_t       cVarDeclInfo_getOffset( subscript );
+ *   void           cVarDeclInfo_getTypeInfo( subscript, Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   void           cVarDeclInfo_getSizeIsExpr( subscript, char_t* expr_str, int32_t max_len );
+ *   ER             cVarDeclInfo_getSizeIs( subscript, uint32_t* size, const void* p_cb );
+ *       subscript:  0...(NCP_cVarDeclInfo-1)
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sVarDeclInfo ) cVarDeclInfo_refer_to_descriptor( int_t subscript );
+ *      Descriptor( nTECSInfo_sVarDeclInfo ) cVarDeclInfo_ref_desc( int_t subscript )      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tStructTypeInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTypeInfo
+ * entry port: eTypeInfo
+ * signature:  nTECSInfo_sTypeInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getName
+ * name:         eTypeInfo_getName
+ * global_name:  nTECSInfo_tStructTypeInfo_eTypeInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNameLength
+ * name:         eTypeInfo_getNameLength
+ * global_name:  nTECSInfo_tStructTypeInfo_eTypeInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eTypeInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+      /* 終端文字 (NULL) を含む */
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getSize
+ * name:         eTypeInfo_getSize
+ * global_name:  nTECSInfo_tStructTypeInfo_eTypeInfo_getSize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getSize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return ATTR_size;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getKind
+ * name:         eTypeInfo_getKind
+ * global_name:  nTECSInfo_tStructTypeInfo_eTypeInfo_getKind
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+int8_t
+eTypeInfo_getKind(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return TECSTypeKind_StructType;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNType
+ * name:         eTypeInfo_getNType
+ * global_name:  nTECSInfo_tStructTypeInfo_eTypeInfo_getNType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNType(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return NCP_cVarDeclInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getTypeInfo
+ * name:         eTypeInfo_getTypeInfo
+ * global_name:  nTECSInfo_tStructTypeInfo_eTypeInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  // *desc = cTypeInfo_refer_to_descriptor( ith );
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNMember
+ * name:         eTypeInfo_getNMember
+ * global_name:  nTECSInfo_tStructTypeInfo_eTypeInfo_getNMember
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNMember(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return NCP_cVarDeclInfo;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getMemberInfo
+ * name:         eTypeInfo_getMemberInfo
+ * global_name:  nTECSInfo_tStructTypeInfo_eTypeInfo_getMemberInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getMemberInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( ith >= NCP_cVarDeclInfo )
+      ercd = E_NOEXS;
+  else
+      *desc = cVarDeclInfo_refer_to_descriptor( ith );
+
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoAccessor.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoAccessor.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoAccessor.c	(revision 374)
@@ -0,0 +1,1130 @@
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * NAME_LEN         int16_t          ATTR_NAME_LEN   
+ * name             char_t*          VAR_name        
+ * name2            char_t*          VAR_name2       
+ * selectedCbp      int8_t*          VAR_selectedCbp 
+ * selectedInibp    int8_t*          VAR_selectedInibp
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cTECSInfo signature: nTECSInfo_sTECSInfo context:task
+ *   ER             cTECSInfo_findNamespace( const char_t* namespace_path, Descriptor( nTECSInfo_sNamespaceInfo )* NSdesc );
+ *   ER             cTECSInfo_findRegion( const char_t* namespace_path, Descriptor( nTECSInfo_sRegionInfo )* RGNdesc );
+ *   ER             cTECSInfo_findSignature( const char_t* namespace_path, Descriptor( nTECSInfo_sSignatureInfo )* SIGdesc );
+ *   ER             cTECSInfo_findCelltype( const char_t* namespace_path, Descriptor( nTECSInfo_sCelltypeInfo )* CTdesc );
+ *   ER             cTECSInfo_findCell( const char_t* namespace_path, Descriptor( nTECSInfo_sCellInfo )* CELLdesc );
+ * call port: cNSInfo signature: nTECSInfo_sNamespaceInfo context:task optional:true
+ *   bool_t     is_cNSInfo_joined()                     check if joined
+ *   ER             cNSInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cNSInfo_getNameLength( );
+ *   uint32_t       cNSInfo_getNNamespace( );
+ *   ER             cNSInfo_getNamespaceInfo( uint32_t ith, Descriptor( nTECSInfo_sNamespaceInfo )* des );
+ *   uint32_t       cNSInfo_getNSignature( );
+ *   ER             cNSInfo_getSignatureInfo( uint32_t ith, Descriptor( nTECSInfo_sSignatureInfo )* des );
+ *   uint32_t       cNSInfo_getNCelltype( );
+ *   ER             cNSInfo_getCelltypeInfo( uint32_t ith, Descriptor( nTECSInfo_sCelltypeInfo )* des );
+ *   [dynamic, optional]
+ *      void           cNSInfo_set_descriptor( Descriptor( nTECSInfo_sNamespaceInfo ) desc );
+ *      void           cNSInfo_unjoin(  );
+ * call port: cCelltypeInfo signature: nTECSInfo_sCelltypeInfo context:task optional:true
+ *   bool_t     is_cCelltypeInfo_joined()                     check if joined
+ *   ER             cCelltypeInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cCelltypeInfo_getNameLength( );
+ *   uint32_t       cCelltypeInfo_getNAttr( );
+ *   ER             cCelltypeInfo_getAttrInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNVar( );
+ *   ER             cCelltypeInfo_getVarInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNCall( );
+ *   ER             cCelltypeInfo_getCallInfo( uint32_t ith, Descriptor( nTECSInfo_sCallInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNEntry( );
+ *   ER             cCelltypeInfo_getEntryInfo( uint32_t ith, Descriptor( nTECSInfo_sEntryInfo )* desc );
+ *   bool_t         cCelltypeInfo_isSingleton( );
+ *   bool_t         cCelltypeInfo_isIDX_is_ID( );
+ *   uint32_t       cCelltypeInfo_sizeOfCB( );
+ *   uint32_t       cCelltypeInfo_sizeOfINIB( );
+ *   [dynamic, optional]
+ *      void           cCelltypeInfo_set_descriptor( Descriptor( nTECSInfo_sCelltypeInfo ) desc );
+ *      void           cCelltypeInfo_unjoin(  );
+ * call port: cAttrInfo signature: nTECSInfo_sVarDeclInfo context:task optional:true
+ *   bool_t     is_cAttrInfo_joined()                     check if joined
+ *   ER             cAttrInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cAttrInfo_getNameLength( );
+ *   uint32_t       cAttrInfo_getOffset( );
+ *   void           cAttrInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   void           cAttrInfo_getSizeIsExpr( char_t* expr_str, int32_t max_len );
+ *   ER             cAttrInfo_getSizeIs( uint32_t* size, const void* p_cb );
+ *   [dynamic, optional]
+ *      void           cAttrInfo_set_descriptor( Descriptor( nTECSInfo_sVarDeclInfo ) desc );
+ *      void           cAttrInfo_unjoin(  );
+ * call port: cVarInfo signature: nTECSInfo_sVarDeclInfo context:task optional:true
+ *   bool_t     is_cVarInfo_joined()                     check if joined
+ *   ER             cVarInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cVarInfo_getNameLength( );
+ *   uint32_t       cVarInfo_getOffset( );
+ *   void           cVarInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   void           cVarInfo_getSizeIsExpr( char_t* expr_str, int32_t max_len );
+ *   ER             cVarInfo_getSizeIs( uint32_t* size, const void* p_cb );
+ *   [dynamic, optional]
+ *      void           cVarInfo_set_descriptor( Descriptor( nTECSInfo_sVarDeclInfo ) desc );
+ *      void           cVarInfo_unjoin(  );
+ * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task optional:true
+ *   bool_t     is_cTypeInfo_joined()                     check if joined
+ *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cTypeInfo_getNameLength( );
+ *   uint32_t       cTypeInfo_getSize( );
+ *   int8_t         cTypeInfo_getKind( );
+ *   uint32_t       cTypeInfo_getNType( );
+ *   ER             cTypeInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   uint32_t       cTypeInfo_getNMember( );
+ *   ER             cTypeInfo_getMemberInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   [dynamic, optional]
+ *      void           cTypeInfo_set_descriptor( Descriptor( nTECSInfo_sTypeInfo ) desc );
+ *      void           cTypeInfo_unjoin(  );
+ * call port: cRegionInfo signature: nTECSInfo_sRegionInfo context:task optional:true
+ *   bool_t     is_cRegionInfo_joined()                     check if joined
+ *   ER             cRegionInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cRegionInfo_getNameLength( );
+ *   uint32_t       cRegionInfo_getNCell( );
+ *   ER             cRegionInfo_getCellInfo( uint32_t ith, Descriptor( nTECSInfo_sCellInfo )* des );
+ *   uint32_t       cRegionInfo_getNRegion( );
+ *   ER             cRegionInfo_getRegionInfo( uint32_t ith, Descriptor( nTECSInfo_sRegionInfo )* des );
+ *   [dynamic, optional]
+ *      void           cRegionInfo_set_descriptor( Descriptor( nTECSInfo_sRegionInfo ) desc );
+ *      void           cRegionInfo_unjoin(  );
+ * call port: cCellInfo signature: nTECSInfo_sCellInfo context:task optional:true
+ *   bool_t     is_cCellInfo_joined()                     check if joined
+ *   ER             cCellInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cCellInfo_getNameLength( );
+ *   void           cCellInfo_getCelltypeInfo( Descriptor( nTECSInfo_sCelltypeInfo )* desc );
+ *   void           cCellInfo_getCBP( void** cbp );
+ *   void           cCellInfo_getINIBP( void** inibp );
+ *   [dynamic, optional]
+ *      void           cCellInfo_set_descriptor( Descriptor( nTECSInfo_sCellInfo ) desc );
+ *      void           cCellInfo_unjoin(  );
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tTECSInfoAccessor_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eSelector
+ * entry port: eSelector
+ * signature:  nTECSInfo_sAccessor
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eSelector_selectNamespaceInfoByName
+ * name:         eSelector_selectNamespaceInfoByName
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectNamespaceInfoByName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectNamespaceInfoByName(CELLIDX idx, const char_t* namespacePath)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sNamespaceInfo ) NSdesc;
+    if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+  /* ここに処理本体を記述します #_TEFB_# */
+  ercd = cTECSInfo_findNamespace( namespacePath, &NSdesc );
+  if( ercd == E_OK ){
+      cNSInfo_set_descriptor( NSdesc );
+  }
+  else{
+      cNSInfo_unjoin();
+  }
+
+  return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCelltypeInfoByName
+ * name:         eSelector_selectCelltypeInfoByName
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectCelltypeInfoByName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCelltypeInfoByName(CELLIDX idx, const char_t* namespacePath)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sCelltypeInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  ercd = cTECSInfo_findCelltype( namespacePath, &desc );
+  if( ercd == E_OK ){
+      cCelltypeInfo_set_descriptor( desc );
+  }
+  else{
+      cCelltypeInfo_unjoin();
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectSignatureInfoByName
+ * name:         eSelector_selectSignatureInfoByName
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectSignatureInfoByName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectSignatureInfoByName(CELLIDX idx, const char_t* namespacePath)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectRegionInfoByName
+ * name:         eSelector_selectRegionInfoByName
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectRegionInfoByName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectRegionInfoByName(CELLIDX idx, const char_t* regionPath)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCellInfoByName
+ * name:         eSelector_selectCellInfoByName
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectCellInfoByName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCellInfoByName(CELLIDX idx, const char_t* cellPath)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedNamespaceInfo
+ * name:         eSelector_getSelectedNamespaceInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedNamespaceInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedNamespaceInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* num_celltype, int_t* num_signature)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCelltypeInfo
+ * name:         eSelector_selectCelltypeInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectCelltypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCelltypeInfo(CELLIDX idx, int_t i)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectSignatureInfo
+ * name:         eSelector_selectSignatureInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectSignatureInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectSignatureInfo(CELLIDX idx, int_t i)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCelltypeInfo
+ * name:         eSelector_getSelectedCelltypeInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedCelltypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCelltypeInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* num_attr, int_t* num_var, int_t* num_call, int_t* num_entry)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCallInfo
+ * name:         eSelector_selectCallInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectCallInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCallInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectEntryInfo
+ * name:         eSelector_selectEntryInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectEntryInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectEntryInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectAttrInfo
+ * name:         eSelector_selectAttrInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectAttrInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectAttrInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectVarInfo
+ * name:         eSelector_selectVarInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectVarInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectVarInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedAttrInfo
+ * name:         eSelector_getSelectedAttrInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedAttrInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedAttrInfo(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSizeIsExprOfAttr
+ * name:         eSelector_getSizeIsExprOfAttr
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSizeIsExprOfAttr
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eSelector_getSizeIsExprOfAttr(CELLIDX idx, char_t* expr_str, int32_t max_len)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectTypeInfoOfAttr
+ * name:         eSelector_selectTypeInfoOfAttr
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectTypeInfoOfAttr
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectTypeInfoOfAttr(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedVarInfo
+ * name:         eSelector_getSelectedVarInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedVarInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedVarInfo(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSizeIsExprOfVar
+ * name:         eSelector_getSizeIsExprOfVar
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSizeIsExprOfVar
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eSelector_getSizeIsExprOfVar(CELLIDX idx, char_t* expr_str, int32_t max_len)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectTypeInfoOfVar
+ * name:         eSelector_selectTypeInfoOfVar
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectTypeInfoOfVar
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectTypeInfoOfVar(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCallInfo
+ * name:         eSelector_getSelectedCallInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedCallInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCallInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* array_size)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectSignatureOfCall
+ * name:         eSelector_selectSignatureOfCall
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectSignatureOfCall
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectSignatureOfCall(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCallSpecifierInfo
+ * name:         eSelector_getSelectedCallSpecifierInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedCallSpecifierInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCallSpecifierInfo(CELLIDX idx, bool_t* b_optional, bool_t* b_dynamic, bool_t* b_ref_desc, bool_t* b_omit)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCallInternalInfo
+ * name:         eSelector_getSelectedCallInternalInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedCallInternalInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCallInternalInfo(CELLIDX idx, bool_t* b_allocator_port, bool_t* b_require_port)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCallLocationInfo
+ * name:         eSelector_getSelectedCallLocationInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedCallLocationInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCallLocationInfo(CELLIDX idx, uint32_t* offset, int8_t* place)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCallOptimizeInfo
+ * name:         eSelector_getSelectedCallOptimizeInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedCallOptimizeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCallOptimizeInfo(CELLIDX idx, bool_t* b_VMT_useless, bool_t* b_skelton_useless, bool_t* b_cell_unique)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedEntryInfo
+ * name:         eSelector_getSelectedEntryInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedEntryInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedEntryInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* array_size)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectSignatureOfEntry
+ * name:         eSelector_selectSignatureOfEntry
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectSignatureOfEntry
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectSignatureOfEntry(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedEntryInlineInfo
+ * name:         eSelector_getSelectedEntryInlineInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedEntryInlineInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedEntryInlineInfo(CELLIDX idx, bool_t* b_inline)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedSignatureInfo
+ * name:         eSelector_getSelectedSignatureInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedSignatureInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedSignatureInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* num_function)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selecFunctionInfoByIndex
+ * name:         eSelector_selecFunctionInfoByIndex
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selecFunctionInfoByIndex
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selecFunctionInfoByIndex(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedFunctionInfo
+ * name:         eSelector_getSelectedFunctionInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedFunctionInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedFunctionInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* num_args)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectTypeInfoOfReturn
+ * name:         eSelector_selectTypeInfoOfReturn
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectTypeInfoOfReturn
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectTypeInfoOfReturn(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedParamInfo
+ * name:         eSelector_getSelectedParamInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedParamInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedParamInfo(CELLIDX idx, char_t* name, int_t max_len, int8_t* dir)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectParamInfo
+ * name:         eSelector_selectParamInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectParamInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectParamInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectTypeInfoOfParam
+ * name:         eSelector_selectTypeInfoOfParam
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectTypeInfoOfParam
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectTypeInfoOfParam(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedTypeInfo
+ * name:         eSelector_getSelectedTypeInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedTypeInfo(CELLIDX idx, char_t* name, int_t max_len, int8_t* kind)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectTypeInfoOfType
+ * name:         eSelector_selectTypeInfoOfType
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectTypeInfoOfType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectTypeInfoOfType(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedRegionInfo
+ * name:         eSelector_getSelectedRegionInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelectedRegionInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedRegionInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* num_cell)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCellInfo
+ * name:         eSelector_selectCellInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectCellInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCellInfo(CELLIDX idx, int_t i)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelecteCellInfo
+ * name:         eSelector_getSelecteCellInfo
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getSelecteCellInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelecteCellInfo(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCelltypeInfoOfCell
+ * name:         eSelector_selectCelltypeInfoOfCell
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_selectCelltypeInfoOfCell
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCelltypeInfoOfCell(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getAttrValue
+ * name:         eSelector_getAttrValue
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getAttrValue
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getAttrValue(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getAttrSizeIsValue
+ * name:         eSelector_getAttrSizeIsValue
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getAttrSizeIsValue
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getAttrSizeIsValue(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getVarValue
+ * name:         eSelector_getVarValue
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getVarValue
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getVarValue(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getVarSizeIsValue
+ * name:         eSelector_getVarSizeIsValue
+ * global_name:  nTECSInfo_tTECSInfoAccessor_eSelector_getVarSizeIsValue
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getVarSizeIsValue(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoSub.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoSub.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoSub.c	(revision 374)
@@ -0,0 +1,526 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name_len         int32_t          ATTR_name_len   
+ * path_len         int32_t          ATTR_path_len   
+ * name1            char_t*          VAR_name1       
+ * name2            char_t*          VAR_name2       
+ * path             char_t*          VAR_path        
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cNamespaceInfo signature: nTECSInfo_sNamespaceInfo context:task
+ *   ER             cNamespaceInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cNamespaceInfo_getNameLength( );
+ *   uint32_t       cNamespaceInfo_getNNamespace( );
+ *   ER             cNamespaceInfo_getNamespaceInfo( uint32_t ith, Descriptor( nTECSInfo_sNamespaceInfo )* des );
+ *   uint32_t       cNamespaceInfo_getNSignature( );
+ *   ER             cNamespaceInfo_getSignatureInfo( uint32_t ith, Descriptor( nTECSInfo_sSignatureInfo )* des );
+ *   uint32_t       cNamespaceInfo_getNCelltype( );
+ *   ER             cNamespaceInfo_getCelltypeInfo( uint32_t ith, Descriptor( nTECSInfo_sCelltypeInfo )* des );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sNamespaceInfo ) cNamespaceInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sNamespaceInfo ) cNamespaceInfo_ref_desc()      (same as above; abbreviated version);
+ * call port: cRegionInfo signature: nTECSInfo_sRegionInfo context:task
+ *   ER             cRegionInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cRegionInfo_getNameLength( );
+ *   uint32_t       cRegionInfo_getNCell( );
+ *   ER             cRegionInfo_getCellInfo( uint32_t ith, Descriptor( nTECSInfo_sCellInfo )* des );
+ *   uint32_t       cRegionInfo_getNRegion( );
+ *   ER             cRegionInfo_getRegionInfo( uint32_t ith, Descriptor( nTECSInfo_sRegionInfo )* des );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sRegionInfo ) cRegionInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sRegionInfo ) cRegionInfo_ref_desc()      (same as above; abbreviated version);
+ * call port: cNamespaceInfoTemp signature: nTECSInfo_sNamespaceInfo context:task optional:true
+ *   bool_t     is_cNamespaceInfoTemp_joined()                     check if joined
+ *   ER             cNamespaceInfoTemp_getName( char_t* name, int_t max_len );
+ *   uint16_t       cNamespaceInfoTemp_getNameLength( );
+ *   uint32_t       cNamespaceInfoTemp_getNNamespace( );
+ *   ER             cNamespaceInfoTemp_getNamespaceInfo( uint32_t ith, Descriptor( nTECSInfo_sNamespaceInfo )* des );
+ *   uint32_t       cNamespaceInfoTemp_getNSignature( );
+ *   ER             cNamespaceInfoTemp_getSignatureInfo( uint32_t ith, Descriptor( nTECSInfo_sSignatureInfo )* des );
+ *   uint32_t       cNamespaceInfoTemp_getNCelltype( );
+ *   ER             cNamespaceInfoTemp_getCelltypeInfo( uint32_t ith, Descriptor( nTECSInfo_sCelltypeInfo )* des );
+ *   [dynamic, optional]
+ *      void           cNamespaceInfoTemp_set_descriptor( Descriptor( nTECSInfo_sNamespaceInfo ) desc );
+ *      void           cNamespaceInfoTemp_unjoin(  );
+ * call port: cRegionInfoTemp signature: nTECSInfo_sRegionInfo context:task optional:true
+ *   bool_t     is_cRegionInfoTemp_joined()                     check if joined
+ *   ER             cRegionInfoTemp_getName( char_t* name, int_t max_len );
+ *   uint16_t       cRegionInfoTemp_getNameLength( );
+ *   uint32_t       cRegionInfoTemp_getNCell( );
+ *   ER             cRegionInfoTemp_getCellInfo( uint32_t ith, Descriptor( nTECSInfo_sCellInfo )* des );
+ *   uint32_t       cRegionInfoTemp_getNRegion( );
+ *   ER             cRegionInfoTemp_getRegionInfo( uint32_t ith, Descriptor( nTECSInfo_sRegionInfo )* des );
+ *   [dynamic, optional]
+ *      void           cRegionInfoTemp_set_descriptor( Descriptor( nTECSInfo_sRegionInfo ) desc );
+ *      void           cRegionInfoTemp_unjoin(  );
+ * call port: cCelltypeInfoTemp signature: nTECSInfo_sCelltypeInfo context:task optional:true
+ *   bool_t     is_cCelltypeInfoTemp_joined()                     check if joined
+ *   ER             cCelltypeInfoTemp_getName( char_t* name, int_t max_len );
+ *   uint16_t       cCelltypeInfoTemp_getNameLength( );
+ *   uint32_t       cCelltypeInfoTemp_getNAttr( );
+ *   ER             cCelltypeInfoTemp_getAttrInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   uint32_t       cCelltypeInfoTemp_getNVar( );
+ *   ER             cCelltypeInfoTemp_getVarInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   uint32_t       cCelltypeInfoTemp_getNCall( );
+ *   ER             cCelltypeInfoTemp_getCallInfo( uint32_t ith, Descriptor( nTECSInfo_sCallInfo )* desc );
+ *   uint32_t       cCelltypeInfoTemp_getNEntry( );
+ *   ER             cCelltypeInfoTemp_getEntryInfo( uint32_t ith, Descriptor( nTECSInfo_sEntryInfo )* desc );
+ *   bool_t         cCelltypeInfoTemp_isSingleton( );
+ *   bool_t         cCelltypeInfoTemp_isIDX_is_ID( );
+ *   uint32_t       cCelltypeInfoTemp_sizeOfCB( );
+ *   uint32_t       cCelltypeInfoTemp_sizeOfINIB( );
+ *   [dynamic, optional]
+ *      void           cCelltypeInfoTemp_set_descriptor( Descriptor( nTECSInfo_sCelltypeInfo ) desc );
+ *      void           cCelltypeInfoTemp_unjoin(  );
+ * call port: cCellInfoTemp signature: nTECSInfo_sCellInfo context:task optional:true
+ *   bool_t     is_cCellInfoTemp_joined()                     check if joined
+ *   ER             cCellInfoTemp_getName( char_t* name, int_t max_len );
+ *   uint16_t       cCellInfoTemp_getNameLength( );
+ *   uint32_t       cCellInfoTemp_getNRawEntryDescriptorInfo( );
+ *   ER             cCellInfoTemp_getRawEntryDescriptorInfo( int_t index, Descriptor( nTECSInfo_sRawEntryDescriptorInfo )* desc );
+ *   void           cCellInfoTemp_getCelltypeInfo( Descriptor( nTECSInfo_sCelltypeInfo )* desc );
+ *   void           cCellInfoTemp_getCBP( void** cbp );
+ *   void           cCellInfoTemp_getINIBP( void** inibp );
+ *   [dynamic, optional]
+ *      void           cCellInfoTemp_set_descriptor( Descriptor( nTECSInfo_sCellInfo ) desc );
+ *      void           cCellInfoTemp_unjoin(  );
+ * call port: cEntryInfoTemp signature: nTECSInfo_sEntryInfo context:task optional:true
+ *   bool_t     is_cEntryInfoTemp_joined()                     check if joined
+ *   ER             cEntryInfoTemp_getName( char_t* name, int_t max_len );
+ *   uint16_t       cEntryInfoTemp_getNameLength( );
+ *   void           cEntryInfoTemp_getSignatureInfo( Descriptor( nTECSInfo_sSignatureInfo )* desc );
+ *   uint32_t       cEntryInfoTemp_getArraySize( );
+ *   bool_t         cEntryInfoTemp_isInline( );
+ *   [dynamic, optional]
+ *      void           cEntryInfoTemp_set_descriptor( Descriptor( nTECSInfo_sEntryInfo ) desc );
+ *      void           cEntryInfoTemp_unjoin(  );
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tTECSInfoSub_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+static ER
+separate_basename( const char_t **namespace_path, char_t **basename );
+
+
+/*
+ * VAR_name1 … 引数として渡されたものをコピーする。ただし、途中の '::' を '\0' に書き換えることはある。
+ * VAR_name2 … 都度上書きして使用する
+ */
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTECSInfo
+ * entry port: eTECSInfo
+ * signature:  nTECSInfo_sTECSInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findNamespace
+ * name:         eTECSInfo_findNamespace
+ * global_name:  nTECSInfo_tTECSInfoSub_eTECSInfo_findNamespace
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTECSInfo_findNamespace(const char_t* namespace_path, Descriptor( nTECSInfo_sNamespaceInfo )* nsDesc)
+{
+    const char_t  *p = namespace_path;
+    char_t  *p2;
+    Descriptor( nTECSInfo_sNamespaceInfo ) desc, desc2;
+    int     i;
+    int     n;
+
+    if( p[ 0 ] == ':' && p[ 1 ] == ':' ){
+        p += 2;
+    }
+    desc = cNamespaceInfo_refer_to_descriptor(); // root name space
+    while( *p != '\0' ){
+        p2 = VAR_name1;
+        for( i = 0; i < ATTR_name_len; i++ ){
+            if( *p == '\0' ||  *p == ':' ){
+                *p2 = '\0';
+                break;
+            }
+            *p2++ = *p++;
+        }
+        if( i == ATTR_name_len )
+            return E_NORES;
+
+        desc2 = desc;
+        cNamespaceInfoTemp_set_descriptor( desc2 );
+        n = cNamespaceInfoTemp_getNNamespace( );
+        for( i = 0; i < n; i++ ){
+            cNamespaceInfoTemp_set_descriptor( desc2 );
+            cNamespaceInfoTemp_getNamespaceInfo( i, &desc );
+            cNamespaceInfoTemp_set_descriptor( desc );
+            cNamespaceInfoTemp_getName( VAR_name2, ATTR_name_len );
+            if( strcmp( VAR_name1, VAR_name2 ) == 0 )
+                break;
+        }
+        if( i == n )
+            return E_NOID;
+
+        if( p[ 0 ] == ':' ){
+            if( p[ 1 ] == ':' )
+                p += 2;
+            else
+                return E_OBJ;
+        }
+    }
+    *nsDesc = desc;
+    return E_OK;
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findRegion
+ * name:         eTECSInfo_findRegion
+ * global_name:  nTECSInfo_tTECSInfoSub_eTECSInfo_findRegion
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTECSInfo_findRegion(const char_t* namespace_path, Descriptor( nTECSInfo_sRegionInfo )* regionDesc)
+{
+    const char_t  *p = namespace_path;
+    char_t  *p2;
+    Descriptor( nTECSInfo_sRegionInfo ) desc, desc2;
+    int     i;
+    int     n;
+
+    if( p[ 0 ] == ':' && p[ 1 ] == ':' ){
+        p += 2;
+    }
+    desc = cRegionInfo_refer_to_descriptor();
+    while( *p != '\0' ){
+        p2 = VAR_name1;
+        for( i = 0; i < ATTR_name_len; i++ ){
+            if( *p == '\0' ||  *p == ':' ){
+                *p2 = '\0';
+                break;
+            }
+            *p2++ = *p++;
+        }
+        if( i == ATTR_name_len )
+            return E_NORES;
+
+        desc2 = desc;
+        cRegionInfoTemp_set_descriptor( desc2 );
+        n = cRegionInfoTemp_getNRegion( );
+        for( i = 0; i < n; i++ ){
+            // syslog_3( LOG_NOTICE, "tTECSInfo.eTECSInfo.findRegion 2 %s i=%d n=%d", VAR_name1, i, n );
+            cRegionInfoTemp_set_descriptor( desc2 );
+            cRegionInfoTemp_getRegionInfo( i, &desc );
+            cRegionInfoTemp_set_descriptor( desc );
+            cRegionInfoTemp_getName( VAR_name2, ATTR_name_len );
+            if( strcmp( VAR_name1, VAR_name2 ) == 0 )
+                break;
+        }
+        if( i == n )
+            return E_NOID;
+
+        if( p[ 0 ] == ':' ){
+            if( p[ 1 ] == ':' )
+                p += 2;
+            else
+                return E_OBJ;
+        }
+    }
+    *regionDesc = desc;
+    return E_OK;
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findSignature
+ * name:         eTECSInfo_findSignature
+ * global_name:  nTECSInfo_tTECSInfoSub_eTECSInfo_findSignature
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTECSInfo_findSignature(const char_t* namespace_path, Descriptor( nTECSInfo_sSignatureInfo )* signatureDesc)
+{
+    Descriptor( nTECSInfo_sNamespaceInfo ) nsDesc;
+    Descriptor( nTECSInfo_sSignatureInfo ) desc;
+    ER        ercd;
+    char_t    *pname;
+    int       i, n;
+
+    ercd = separate_basename( &namespace_path, &pname );
+    if( ercd != E_OK )
+        return ercd;
+
+    ercd = eTECSInfo_findNamespace( namespace_path, &nsDesc);
+    if( ercd != E_OK )
+        return ercd;
+
+    // syslog_0( LOG_NOTICE, "tTECSInfo.eTECSInfo.findCell 4" );
+    cNamespaceInfoTemp_set_descriptor( nsDesc );
+    n = cNamespaceInfoTemp_getNSignature( );
+    for( i = 0; i < n; i++ ){
+        cNamespaceInfoTemp_getSignatureInfo( i, &desc );
+        cSignatureInfoTemp_set_descriptor( desc );
+        cSignatureInfoTemp_getName( VAR_name1, ATTR_name_len );
+        if( strcmp( pname, VAR_name1 ) == 0 )
+            break;
+    }
+    // syslog_0( LOG_NOTICE, "tTECSInfo.eTECSInfo.findCell 5" );
+    if( i == n )
+        return E_NOEXS;
+
+    *signatureDesc = desc;
+    return E_OK;
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findCelltype
+ * name:         eTECSInfo_findCelltype
+ * global_name:  nTECSInfo_tTECSInfoSub_eTECSInfo_findCelltype
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTECSInfo_findCelltype(const char_t* namespace_path, Descriptor( nTECSInfo_sCelltypeInfo )* celltypeDesc)
+{
+  return E_NOSPT;
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findCell
+ * name:         eTECSInfo_findCell
+ * global_name:  nTECSInfo_tTECSInfoSub_eTECSInfo_findCell
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTECSInfo_findCell(const char_t* namespace_path, Descriptor( nTECSInfo_sCellInfo )* cellDesc)
+{
+    char_t  *p, *pname;
+    Descriptor( nTECSInfo_sRegionInfo ) RegionDesc;
+    Descriptor( nTECSInfo_sCellInfo )   desc;
+    int     i, n, len;
+    ER      ercd;
+
+#if 0
+    // syslog_0( LOG_NOTICE, "tTECSInfo.eTECSInfo.findCell 1" );
+    len = strnlen( namespace_path, ATTR_path_len );
+    if( len >= ATTR_path_len ){
+        return E_NOMEM;
+    }
+    if( VAR_path != namespace_path )     // findRawEntryDescriptorInfo から呼ばれた時、VAR_path に入っているのでコピー不要
+        strcpy( VAR_path, namespace_path );
+    p = &VAR_path[ len - 1 ];
+    while( p > VAR_path ){
+        if( *p == ':' )
+            break;
+        p--;
+    }
+    if( *p == ':' ){
+        p--;
+        if( p < VAR_path || *p != ':' )
+            return E_PAR;    // :: ではなく、: であった
+        if( p == VAR_path ){
+            namespace_path = "::";
+        }
+        else{
+            *p = '\0';
+            namespace_path = VAR_path;
+        }
+        pname = &p[2];
+    }
+    else{
+        namespace_path = "::";
+        pname = VAR_path;
+    }
+#endif
+    ercd = separate_basename( &namespace_path, &pname );
+    if( ercd != E_OK )
+        return ercd;
+
+    // syslog_2( LOG_NOTICE, "tTECSInfo.eTECSInfo.findCell 2 %s %s", namespace_path, pname );
+    
+    // syslog_0( LOG_NOTICE, "tTECSInfo.eTECSInfo.findCell 3" );
+    ercd = eTECSInfo_findRegion( namespace_path, &RegionDesc);
+    if( ercd != E_OK )
+        return ercd;
+
+    // syslog_0( LOG_NOTICE, "tTECSInfo.eTECSInfo.findCell 4" );
+    cRegionInfoTemp_set_descriptor( RegionDesc );
+    n = cRegionInfoTemp_getNCell( );
+    for( i = 0; i < n; i++ ){
+        cRegionInfoTemp_getCellInfo( i, &desc );
+        cCellInfoTemp_set_descriptor( desc );
+        cCellInfoTemp_getName( VAR_name1, ATTR_name_len );
+        if( strcmp( pname, VAR_name1 ) == 0 )
+            break;
+    }
+    // syslog_0( LOG_NOTICE, "tTECSInfo.eTECSInfo.findCell 5" );
+    if( i == n )
+        return E_NOEXS;
+
+    *cellDesc = desc;
+    return E_OK;
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findRawEntryDescriptor
+ * name:         eTECSInfo_findRawEntryDescriptor
+ * global_name:  nTECSInfo_tTECSInfoSub_eTECSInfo_findRawEntryDescriptor
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTECSInfo_findRawEntryDescriptor(const char_t* namespace_path, int_t ith, Descriptor( nTECSInfo_sRawEntryDescriptorInfo )* rawEntryDescDesc, Descriptor( nTECSInfo_sEntryInfo )* entryDesc)
+{
+    int_t  len;
+    Descriptor( nTECSInfo_sCelltypeInfo )  celltypeDesc;
+    Descriptor( nTECSInfo_sCellInfo )      cellDesc;
+    Descriptor( nTECSInfo_sEntryInfo )     entDesc;
+    char_t *p;
+    int_t  i, n;
+    ER     ercd;
+
+    len = strnlen( namespace_path, ATTR_path_len );
+    if( len >= ATTR_path_len ){
+        return E_NOMEM;
+    }
+    strcpy( VAR_path, namespace_path );
+    p = &VAR_path[len-1];
+    while( *p != '.' && p != &VAR_path[0] )
+        p--;
+    if( *p != '.' )
+        return E_PAR;    // '.' が見つからない
+    *p = '\0';
+    ercd = eTECSInfo_findCell( VAR_path, &cellDesc);
+    if( ercd != E_OK )
+        return ercd;
+    cCellInfoTemp_set_descriptor( cellDesc );
+    cCellInfoTemp_getCelltypeInfo( &celltypeDesc  );
+    cCelltypeInfoTemp_set_descriptor( celltypeDesc );
+    n = cCelltypeInfoTemp_getNEntry();
+    p += 1;
+    //syslog_1( LOG_NOTICE, "tTECSInfo.eTECSInfo.findRawEntryDescriptor 4 n_entry=%d", n );
+    // dly_tsk( 10000 );
+    for( i = 0; i < n; i++ ){
+        ercd = cCelltypeInfoTemp_getEntryInfo( i, &entDesc ); // エラーはみない
+        //syslog_2( LOG_NOTICE, "tTECSInfo.eTECSInfo.findRawEntryDescriptor 5 ercd=%d entDesc=%x", ercd, entDesc.vdes );
+        cEntryInfoTemp_set_descriptor( entDesc );
+        ercd = cEntryInfoTemp_getName( VAR_name1, ATTR_name_len );
+        //dly_tsk( 5 );
+        //syslog_4( LOG_NOTICE, "tTECSInfo.eTECSInfo.findRawEntryDescriptor 6 ercd=%d entDesc=%x nm=%s p=%s", ercd, entDesc.vdes, VAR_name1, p );
+        //dly_tsk( 5 );
+        if( ercd != E_OK )
+            return ercd;
+        if( strcmp( VAR_name1, p ) == 0 )
+            break;
+    }
+    if( i != n ){
+        cCellInfoTemp_getRawEntryDescriptorInfo( ith, rawEntryDescDesc );
+        *entryDesc = entDesc;
+    }
+    else{
+        ercd = E_NOEXS;
+    }
+    return ercd;
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findRawEntryDescriptor_unsafe
+ * name:         eTECSInfo_findRawEntryDescriptor_unsafe
+ * global_name:  nTECSInfo_tTECSInfoSub_eTECSInfo_findRawEntryDescriptor_unsafe
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTECSInfo_findRawEntryDescriptor_unsafe(const char_t* namespace_path, void** rawDesc)
+{
+    ER   ercd;
+    Descriptor( nTECSInfo_sRawEntryDescriptorInfo ) rawEntryDescDesc;
+    Descriptor( nTECSInfo_sEntryInfo ) entryDesc;
+    ercd = eTECSInfo_findRawEntryDescriptor(namespace_path, 0, &rawEntryDescDesc, &entryDesc);
+    if( ercd != E_OK )
+        return ercd;
+    cRawEntryDescriptorInfoTemp_set_descriptor( rawEntryDescDesc );
+    ercd = cRawEntryDescriptorInfoTemp_getRawDescriptor( 0, rawDesc );
+    return ercd;
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
+
+/*
+ * namespace_path を VAR_path へコピーし、ディレクトリパス部とオブジェクト名部に分割する
+ * namespace_path  "::namespace::subnamespace::object_name"
+ * VAR_path        "::namespace::subnamespace\0:object_name"   一番右の '::' を '\0:' に置き換える
+ * basename        "object_name" へのポインタを返す
+ */
+static ER
+separate_basename( const char_t **namespace_path, char_t **basename )
+{
+    int     i, len;
+    char_t  *p;
+    static const char_t *root_namespacepath = "::";
+
+    len = strnlen( *namespace_path, ATTR_path_len );
+    if( len >= ATTR_path_len ){
+        return E_NOMEM;
+    }
+    if( VAR_path != *namespace_path )     // findRawEntryDescriptorInfo から呼ばれた時、VAR_path に入っているのでコピー不要
+        strcpy( VAR_path, *namespace_path );
+    p = &VAR_path[ len - 1 ];
+    while( p > VAR_path ){
+        if( *p == ':' )
+            break;
+        p--;
+    }
+    if( *p == ':' ){
+        p--;
+        if( p < VAR_path || *p != ':' )
+            return E_PAR;    // :: ではなく、: であった
+        if( p == VAR_path ){
+            *namespace_path = root_namespacepath;
+        }
+        else{
+            *p = '\0';
+            *namespace_path = VAR_path;
+        }
+        *basename = &p[2];
+    }
+    else{
+        *namespace_path = root_namespacepath;
+        *basename = VAR_path;
+    }
+    return  E_OK;
+}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfo_inline.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfo_inline.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfo_inline.h	(revision 374)
@@ -0,0 +1,149 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+#ifndef nTECSInfo_tTECSInfo__INLINE_H
+#define nTECSInfo_tTECSInfo__INLINE_H
+
+/*
+ * This file was automatically generated by tecsgen.
+ * Move and rename like below before editing,
+ *   gen/tTECSInfo_inline_template.h => src/tTECSInfo_inline.h
+ * to avoid to be overwritten by tecsgen.
+ */
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cTECSInfo signature: nTECSInfo_sTECSInfo context:task
+ *   ER             cTECSInfo_findNamespace( const char_t* namespace_path, Descriptor( nTECSInfo_sNamespaceInfo )* nsDesc );
+ *   ER             cTECSInfo_findRegion( const char_t* namespace_path, Descriptor( nTECSInfo_sRegionInfo )* regionDesc );
+ *   ER             cTECSInfo_findSignature( const char_t* namespace_path, Descriptor( nTECSInfo_sSignatureInfo )* signatureDesc );
+ *   ER             cTECSInfo_findCelltype( const char_t* namespace_path, Descriptor( nTECSInfo_sCelltypeInfo )* celltypeDesc );
+ *   ER             cTECSInfo_findCell( const char_t* namespace_path, Descriptor( nTECSInfo_sCellInfo )* cellDesc );
+ *   ER             cTECSInfo_findRawEntryDescriptor( const char_t* namespace_path, Descriptor( nTECSInfo_sRawEntryDescriptorInfo )* rawEntryDescDesc, Descriptor( nTECSInfo_sEntryInfo )* entryDesc );
+ *   ER             cTECSInfo_findRawEntryDescriptor_unsafe( const char_t* namespace_path, void** rawDesc );
+ *
+ * #[</PREAMBLE>]# */
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTECSInfo
+ * entry port: eTECSInfo
+ * signature:  nTECSInfo_sTECSInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findNamespace
+ * name:         eTECSInfo_findNamespace
+ * global_name:  nTECSInfo_tTECSInfo_eTECSInfo_findNamespace
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER
+eTECSInfo_findNamespace(const char_t* namespace_path, Descriptor( nTECSInfo_sNamespaceInfo )* nsDesc)
+{
+    return cTECSInfo_findNamespace( namespace_path, nsDesc );
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findRegion
+ * name:         eTECSInfo_findRegion
+ * global_name:  nTECSInfo_tTECSInfo_eTECSInfo_findRegion
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER
+eTECSInfo_findRegion(const char_t* namespace_path, Descriptor( nTECSInfo_sRegionInfo )* regionDesc)
+{
+    return cTECSInfo_findRegion( namespace_path, regionDesc );
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findSignature
+ * name:         eTECSInfo_findSignature
+ * global_name:  nTECSInfo_tTECSInfo_eTECSInfo_findSignature
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER
+eTECSInfo_findSignature(const char_t* namespace_path, Descriptor( nTECSInfo_sSignatureInfo )* signatureDesc)
+{
+    return cTECSInfo_findSignature( namespace_path, signatureDesc );
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findCelltype
+ * name:         eTECSInfo_findCelltype
+ * global_name:  nTECSInfo_tTECSInfo_eTECSInfo_findCelltype
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER
+eTECSInfo_findCelltype(const char_t* namespace_path, Descriptor( nTECSInfo_sCelltypeInfo )* celltypeDesc)
+{
+  return cTECSInfo_findCelltype( namespace_path, celltypeDesc );
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findCell
+ * name:         eTECSInfo_findCell
+ * global_name:  nTECSInfo_tTECSInfo_eTECSInfo_findCell
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER
+eTECSInfo_findCell(const char_t* namespace_path, Descriptor( nTECSInfo_sCellInfo )* cellDesc)
+{
+  return cTECSInfo_findCell( namespace_path, cellDesc );
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findRawEntryDescriptor
+ * name:         eTECSInfo_findRawEntryDescriptor
+ * global_name:  nTECSInfo_tTECSInfo_eTECSInfo_findRawEntryDescriptor
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER
+eTECSInfo_findRawEntryDescriptor(const char_t* namespace_path, int_t ith, Descriptor( nTECSInfo_sRawEntryDescriptorInfo )* rawEntryDescDesc, Descriptor( nTECSInfo_sEntryInfo )* entryDesc)
+{
+    return cTECSInfo_findRawEntryDescriptor(namespace_path, ith, rawEntryDescDesc, entryDesc);
+}
+
+/* #[<ENTRY_FUNC>]# eTECSInfo_findRawEntryDescriptor_unsafe
+ * name:         eTECSInfo_findRawEntryDescriptor_unsafe
+ * global_name:  nTECSInfo_tTECSInfo_eTECSInfo_findRawEntryDescriptor_unsafe
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER
+eTECSInfo_findRawEntryDescriptor_unsafe(const char_t* namespace_path, void** rawDesc)
+{
+    return cTECSInfo_findRawEntryDescriptor_unsafe(namespace_path, rawDesc);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
+
+#endif /* nTECSInfo_tTECSInfo_INLINEH */
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTypeInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTypeInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTypeInfo.c	(revision 374)
@@ -0,0 +1,202 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * typeKind         int8_t           ATTR_typeKind   
+ * bitSize          int32_t          ATTR_bitSize    
+ * b_const          bool_t           ATTR_b_const    
+ * b_volatile       bool_t           ATTR_b_volatile 
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task optional:true
+ *   bool_t     is_cTypeInfo_joined()                     check if joined
+ *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
+ *   void           cTypeInfo_getNameLength( uint16_t* len );
+ *   void           cTypeInfo_getSize( uint32_t* size );
+ *   void           cTypeInfo_getKind( int8_t* kind );
+ *   void           cTypeInfo_getNType( int32_t* num );
+ *   void           cTypeInfo_getTypeInfo( int32_t ith, Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_ref_desc()      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tTypeInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTypeInfo
+ * entry port: eTypeInfo
+ * signature:  nTECSInfo_sTypeInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getName
+ * name:         eTypeInfo_getName
+ * global_name:  nTECSInfo_tTypeInfo_eTypeInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNameLength
+ * name:         eTypeInfo_getNameLength
+ * global_name:  nTECSInfo_tTypeInfo_eTypeInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eTypeInfo_getNameLength(CELLIDX idx, uint16_t* len)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getSize
+ * name:         eTypeInfo_getSize
+ * global_name:  nTECSInfo_tTypeInfo_eTypeInfo_getSize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eTypeInfo_getSize(CELLIDX idx, uint32_t* size)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getKind
+ * name:         eTypeInfo_getKind
+ * global_name:  nTECSInfo_tTypeInfo_eTypeInfo_getKind
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eTypeInfo_getKind(CELLIDX idx, int8_t* kind)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNType
+ * name:         eTypeInfo_getNType
+ * global_name:  nTECSInfo_tTypeInfo_eTypeInfo_getNType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eTypeInfo_getNType(CELLIDX idx, int32_t* num)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getTypeInfo
+ * name:         eTypeInfo_getTypeInfo
+ * global_name:  nTECSInfo_tTypeInfo_eTypeInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eTypeInfo_getTypeInfo(CELLIDX idx, int32_t ith, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVarDeclInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVarDeclInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVarDeclInfo.c	(revision 374)
@@ -0,0 +1,213 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * sizeIsExpr       char_t*          ATTR_sizeIsExpr 
+ * declType         int8_t           ATTR_declType   
+ * place            int8_t           ATTR_place      
+ * offset           uint32_t         ATTR_offset     
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task
+ *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cTypeInfo_getNameLength( );
+ *   uint32_t       cTypeInfo_getSize( );
+ *   int8_t         cTypeInfo_getKind( );
+ *   uint32_t       cTypeInfo_getNType( );
+ *   ER             cTypeInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   uint32_t       cTypeInfo_getNMember( );
+ *   ER             cTypeInfo_getMemberInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   [ref_desc]
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_refer_to_descriptor();
+ *      Descriptor( nTECSInfo_sTypeInfo ) cTypeInfo_ref_desc()      (same as above; abbreviated version);
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tVarDeclInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eVarDeclInfo
+ * entry port: eVarDeclInfo
+ * signature:  nTECSInfo_sVarDeclInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eVarDeclInfo_getName
+ * name:         eVarDeclInfo_getName
+ * global_name:  nTECSInfo_tVarDeclInfo_eVarDeclInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eVarDeclInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eVarDeclInfo_getNameLength
+ * name:         eVarDeclInfo_getNameLength
+ * global_name:  nTECSInfo_tVarDeclInfo_eVarDeclInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eVarDeclInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eVarDeclInfo_getLocationInfo
+ * name:         eVarDeclInfo_getLocationInfo
+ * global_name:  nTECSInfo_tVarDeclInfo_eVarDeclInfo_getLocationInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eVarDeclInfo_getLocationInfo(CELLIDX idx, uint32_t* offset, int8_t* place)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  *offset = ATTR_offset;
+  *place  = ATTR_place;
+}
+
+/* #[<ENTRY_FUNC>]# eVarDeclInfo_getTypeInfo
+ * name:         eVarDeclInfo_getTypeInfo
+ * global_name:  nTECSInfo_tVarDeclInfo_eVarDeclInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eVarDeclInfo_getTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  *desc = cTypeInfo_refer_to_descriptor();
+}
+
+/* #[<ENTRY_FUNC>]# eVarDeclInfo_getSizeIsExpr
+ * name:         eVarDeclInfo_getSizeIsExpr
+ * global_name:  nTECSInfo_tVarDeclInfo_eVarDeclInfo_getSizeIsExpr
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eVarDeclInfo_getSizeIsExpr(CELLIDX idx, char_t* expr_str, int32_t max_len)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  strncpy( expr_str, ATTR_sizeIsExpr, max_len - 1 );
+  expr_str[ max_len - 1 ] = '\0';
+}
+
+/* #[<ENTRY_FUNC>]# eVarDeclInfo_getSizeIs
+ * name:         eVarDeclInfo_getSizeIs
+ * global_name:  nTECSInfo_tVarDeclInfo_eVarDeclInfo_getSizeIs
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eVarDeclInfo_getSizeIs(CELLIDX idx, uint32_t* size, const void* p_cb)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  ercd = E_NOSPT;
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVoidTypeInfo.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVoidTypeInfo.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVoidTypeInfo.c	(revision 374)
@@ -0,0 +1,237 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * name             char_t*          ATTR_name       
+ * typeKind         int8_t           ATTR_typeKind   
+ * size             uint32_t         ATTR_size       
+ * b_const          bool_t           ATTR_b_const    
+ * b_volatile       bool_t           ATTR_b_volatile 
+ *
+ * #[</PREAMBLE>]# */
+
+/* Put prototype declaration and/or variale definition here #_PAC_# */
+#include <string.h>
+#include "nTECSInfo_tVoidTypeInfo_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* entry port function #_TEPF_# */
+/* #[<ENTRY_PORT>]# eTypeInfo
+ * entry port: eTypeInfo
+ * signature:  nTECSInfo_sTypeInfo
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getName
+ * name:         eTypeInfo_getName
+ * global_name:  nTECSInfo_tVoidTypeInfo_eTypeInfo_getName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getName(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	name[ max_len - 1 ] = '\0';
+	strncpy( name, ATTR_name, max_len );
+  if( name[ max_len - 1 ] ){
+      name[ max_len - 1 ] = '\0';
+      ercd = E_NOMEM;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNameLength
+ * name:         eTypeInfo_getNameLength
+ * global_name:  nTECSInfo_tVoidTypeInfo_eTypeInfo_getNameLength
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint16_t
+eTypeInfo_getNameLength(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+	return strlen( ATTR_name ) + 1;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getSize
+ * name:         eTypeInfo_getSize
+ * global_name:  nTECSInfo_tVoidTypeInfo_eTypeInfo_getSize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getSize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return ATTR_size;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getKind
+ * name:         eTypeInfo_getKind
+ * global_name:  nTECSInfo_tVoidTypeInfo_eTypeInfo_getKind
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+int8_t
+eTypeInfo_getKind(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return ATTR_typeKind;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNType
+ * name:         eTypeInfo_getNType
+ * global_name:  nTECSInfo_tVoidTypeInfo_eTypeInfo_getNType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNType(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return 0;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getTypeInfo
+ * name:         eTypeInfo_getTypeInfo
+ * global_name:  nTECSInfo_tVoidTypeInfo_eTypeInfo_getTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getTypeInfo(CELLIDX idx, Descriptor( nTECSInfo_sTypeInfo )* desc)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* Write error processing code here */
+	} /* end if VALID_IDX(idx) */
+
+	/* Put statements here #_TEFB_# */
+  return E_NOEXS;
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getNMember
+ * name:         eTypeInfo_getNMember
+ * global_name:  nTECSInfo_tVoidTypeInfo_eTypeInfo_getNMember
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+uint32_t
+eTypeInfo_getNMember(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+}
+
+/* #[<ENTRY_FUNC>]# eTypeInfo_getMemberInfo
+ * name:         eTypeInfo_getMemberInfo
+ * global_name:  nTECSInfo_tVoidTypeInfo_eTypeInfo_getMemberInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eTypeInfo_getMemberInfo(CELLIDX idx, uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/tTECSInfoAccessor.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/tTECSInfoAccessor.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/tTECSInfoAccessor.c	(revision 374)
@@ -0,0 +1,1613 @@
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * NAME_LEN         int16_t          ATTR_NAME_LEN   
+ * name             char_t*          VAR_name        
+ * name2            char_t*          VAR_name2       
+ * selectedCbp      int8_t*          VAR_selectedCbp 
+ * selectedInibp    int8_t*          VAR_selectedInibp
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cTECSInfo signature: nTECSInfo_sTECSInfo context:task
+ *   ER             cTECSInfo_findNamespace( const char_t* namespace_path, Descriptor( nTECSInfo_sNamespaceInfo )* NSdesc );
+ *   ER             cTECSInfo_findRegion( const char_t* namespace_path, Descriptor( nTECSInfo_sRegionInfo )* RGNdesc );
+ *   ER             cTECSInfo_findSignature( const char_t* namespace_path, Descriptor( nTECSInfo_sSignatureInfo )* SIGdesc );
+ *   ER             cTECSInfo_findCelltype( const char_t* namespace_path, Descriptor( nTECSInfo_sCelltypeInfo )* CTdesc );
+ *   ER             cTECSInfo_findCell( const char_t* namespace_path, Descriptor( nTECSInfo_sCellInfo )* CELLdesc );
+ * call port: cNSInfo signature: nTECSInfo_sNamespaceInfo context:task optional:true
+ *   bool_t     is_cNSInfo_joined()                     check if joined
+ *   ER             cNSInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cNSInfo_getNameLength( );
+ *   uint32_t       cNSInfo_getNNamespace( );
+ *   ER             cNSInfo_getNamespaceInfo( uint32_t ith, Descriptor( nTECSInfo_sNamespaceInfo )* des );
+ *   uint32_t       cNSInfo_getNSignature( );
+ *   ER             cNSInfo_getSignatureInfo( uint32_t ith, Descriptor( nTECSInfo_sSignatureInfo )* des );
+ *   uint32_t       cNSInfo_getNCelltype( );
+ *   ER             cNSInfo_getCelltypeInfo( uint32_t ith, Descriptor( nTECSInfo_sCelltypeInfo )* des );
+ *   [dynamic, optional]
+ *      void           cNSInfo_set_descriptor( Descriptor( nTECSInfo_sNamespaceInfo ) desc );
+ *      void           cNSInfo_unjoin(  );
+ * call port: cCelltypeInfo signature: nTECSInfo_sCelltypeInfo context:task optional:true
+ *   bool_t     is_cCelltypeInfo_joined()                     check if joined
+ *   ER             cCelltypeInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cCelltypeInfo_getNameLength( );
+ *   uint32_t       cCelltypeInfo_getNAttr( );
+ *   ER             cCelltypeInfo_getAttrInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNVar( );
+ *   ER             cCelltypeInfo_getVarInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNCall( );
+ *   ER             cCelltypeInfo_getCallInfo( uint32_t ith, Descriptor( nTECSInfo_sCallInfo )* desc );
+ *   uint32_t       cCelltypeInfo_getNEntry( );
+ *   ER             cCelltypeInfo_getEntryInfo( uint32_t ith, Descriptor( nTECSInfo_sEntryInfo )* desc );
+ *   bool_t         cCelltypeInfo_isSingleton( );
+ *   bool_t         cCelltypeInfo_isIDX_is_ID( );
+ *   uint32_t       cCelltypeInfo_sizeOfCB( );
+ *   uint32_t       cCelltypeInfo_sizeOfINIB( );
+ *   [dynamic, optional]
+ *      void           cCelltypeInfo_set_descriptor( Descriptor( nTECSInfo_sCelltypeInfo ) desc );
+ *      void           cCelltypeInfo_unjoin(  );
+ * call port: cSignatureInfo signature: nTECSInfo_sSignatureInfo context:task optional:true
+ *   bool_t     is_cSignatureInfo_joined()                     check if joined
+ *   ER             cSignatureInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cSignatureInfo_getNameLength( );
+ *   uint32_t       cSignatureInfo_getNFunction( );
+ *   ER             cSignatureInfo_getFunctionInfo( uint32_t ith, Descriptor( nTECSInfo_sFunctionInfo )* desc );
+ *   [dynamic, optional]
+ *      void           cSignatureInfo_set_descriptor( Descriptor( nTECSInfo_sSignatureInfo ) desc );
+ *      void           cSignatureInfo_unjoin(  );
+ * call port: cFunctionInfo signature: nTECSInfo_sFunctionInfo context:task optional:true
+ *   bool_t     is_cFunctionInfo_joined()                     check if joined
+ *   ER             cFunctionInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cFunctionInfo_getNameLength( );
+ *   void           cFunctionInfo_getReturnTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   uint32_t       cFunctionInfo_getNParam( );
+ *   ER             cFunctionInfo_getParamInfo( uint32_t ith, Descriptor( nTECSInfo_sParamInfo )* param );
+ *   [dynamic, optional]
+ *      void           cFunctionInfo_set_descriptor( Descriptor( nTECSInfo_sFunctionInfo ) desc );
+ *      void           cFunctionInfo_unjoin(  );
+ * call port: cParamInfo signature: nTECSInfo_sParamInfo context:task optional:true
+ *   bool_t     is_cParamInfo_joined()                     check if joined
+ *   ER             cParamInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cParamInfo_getNameLength( );
+ *   ER             cParamInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   ER             cParamInfo_getDir( int8_t* dir );
+ *   [dynamic, optional]
+ *      void           cParamInfo_set_descriptor( Descriptor( nTECSInfo_sParamInfo ) desc );
+ *      void           cParamInfo_unjoin(  );
+ * call port: cCallInfo signature: nTECSInfo_sCallInfo context:task optional:true
+ *   bool_t     is_cCallInfo_joined()                     check if joined
+ *   ER             cCallInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cCallInfo_getNameLength( );
+ *   void           cCallInfo_getSignatureInfo( Descriptor( nTECSInfo_sSignatureInfo )* desc );
+ *   uint32_t       cCallInfo_getArraySize( );
+ *   void           cCallInfo_getSpecifierInfo( bool_t* b_optional, bool_t* b_dynamic, bool_t* b_ref_desc, bool_t* b_omit );
+ *   void           cCallInfo_getInternalInfo( bool_t* b_allocator_port, bool_t* b_require_port );
+ *   void           cCallInfo_getLocationInfo( uint32_t* offset, int8_t* place );
+ *   void           cCallInfo_getOptimizeInfo( bool_t* b_VMT_useless, bool_t* b_skelton_useless, bool_t* b_cell_unique );
+ *   [dynamic, optional]
+ *      void           cCallInfo_set_descriptor( Descriptor( nTECSInfo_sCallInfo ) desc );
+ *      void           cCallInfo_unjoin(  );
+ * call port: cEntryInfo signature: nTECSInfo_sEntryInfo context:task optional:true
+ *   bool_t     is_cEntryInfo_joined()                     check if joined
+ *   ER             cEntryInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cEntryInfo_getNameLength( );
+ *   void           cEntryInfo_getSignatureInfo( Descriptor( nTECSInfo_sSignatureInfo )* desc );
+ *   uint32_t       cEntryInfo_getArraySize( );
+ *   bool_t         cEntryInfo_isInline( );
+ *   [dynamic, optional]
+ *      void           cEntryInfo_set_descriptor( Descriptor( nTECSInfo_sEntryInfo ) desc );
+ *      void           cEntryInfo_unjoin(  );
+ * call port: cAttrInfo signature: nTECSInfo_sVarDeclInfo context:task optional:true
+ *   bool_t     is_cAttrInfo_joined()                     check if joined
+ *   ER             cAttrInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cAttrInfo_getNameLength( );
+ *   void           cAttrInfo_getLocationInfo( uint32_t* offset, int8_t* place );
+ *   void           cAttrInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   void           cAttrInfo_getSizeIsExpr( char_t* expr_str, int32_t max_len );
+ *   ER             cAttrInfo_getSizeIs( uint32_t* size, const void* p_cb );
+ *   [dynamic, optional]
+ *      void           cAttrInfo_set_descriptor( Descriptor( nTECSInfo_sVarDeclInfo ) desc );
+ *      void           cAttrInfo_unjoin(  );
+ * call port: cVarInfo signature: nTECSInfo_sVarDeclInfo context:task optional:true
+ *   bool_t     is_cVarInfo_joined()                     check if joined
+ *   ER             cVarInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cVarInfo_getNameLength( );
+ *   void           cVarInfo_getLocationInfo( uint32_t* offset, int8_t* place );
+ *   void           cVarInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   void           cVarInfo_getSizeIsExpr( char_t* expr_str, int32_t max_len );
+ *   ER             cVarInfo_getSizeIs( uint32_t* size, const void* p_cb );
+ *   [dynamic, optional]
+ *      void           cVarInfo_set_descriptor( Descriptor( nTECSInfo_sVarDeclInfo ) desc );
+ *      void           cVarInfo_unjoin(  );
+ * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task optional:true
+ *   bool_t     is_cTypeInfo_joined()                     check if joined
+ *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cTypeInfo_getNameLength( );
+ *   uint32_t       cTypeInfo_getSize( );
+ *   int8_t         cTypeInfo_getKind( );
+ *   uint32_t       cTypeInfo_getNType( );
+ *   ER             cTypeInfo_getTypeInfo( Descriptor( nTECSInfo_sTypeInfo )* desc );
+ *   uint32_t       cTypeInfo_getNMember( );
+ *   ER             cTypeInfo_getMemberInfo( uint32_t ith, Descriptor( nTECSInfo_sVarDeclInfo )* desc );
+ *   [dynamic, optional]
+ *      void           cTypeInfo_set_descriptor( Descriptor( nTECSInfo_sTypeInfo ) desc );
+ *      void           cTypeInfo_unjoin(  );
+ * call port: cRegionInfo signature: nTECSInfo_sRegionInfo context:task optional:true
+ *   bool_t     is_cRegionInfo_joined()                     check if joined
+ *   ER             cRegionInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cRegionInfo_getNameLength( );
+ *   uint32_t       cRegionInfo_getNCell( );
+ *   ER             cRegionInfo_getCellInfo( uint32_t ith, Descriptor( nTECSInfo_sCellInfo )* des );
+ *   uint32_t       cRegionInfo_getNRegion( );
+ *   ER             cRegionInfo_getRegionInfo( uint32_t ith, Descriptor( nTECSInfo_sRegionInfo )* des );
+ *   [dynamic, optional]
+ *      void           cRegionInfo_set_descriptor( Descriptor( nTECSInfo_sRegionInfo ) desc );
+ *      void           cRegionInfo_unjoin(  );
+ * call port: cCellInfo signature: nTECSInfo_sCellInfo context:task optional:true
+ *   bool_t     is_cCellInfo_joined()                     check if joined
+ *   ER             cCellInfo_getName( char_t* name, int_t max_len );
+ *   uint16_t       cCellInfo_getNameLength( );
+ *   void           cCellInfo_getCelltypeInfo( Descriptor( nTECSInfo_sCelltypeInfo )* desc );
+ *   void           cCellInfo_getCBP( void** cbp );
+ *   void           cCellInfo_getINIBP( void** inibp );
+ *   [dynamic, optional]
+ *      void           cCellInfo_set_descriptor( Descriptor( nTECSInfo_sCellInfo ) desc );
+ *      void           cCellInfo_unjoin(  );
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include "tTECSInfoAccessor_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+static void
+getSelectedTypeValue( CELLCB *p_cellcb, void *ptr, char_t *buf, int_t max_len );
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eSelector
+ * entry port: eSelector
+ * signature:  sAccessor
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eSelector_selectNamespaceInfoByName
+ * name:         eSelector_selectNamespaceInfoByName
+ * global_name:  tTECSInfoAccessor_eSelector_selectNamespaceInfoByName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectNamespaceInfoByName(CELLIDX idx, const char_t* namespacePath)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sNamespaceInfo ) NSdesc;
+  if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  ercd = cTECSInfo_findNamespace( namespacePath, &NSdesc );
+  if( ercd == E_OK ){
+      cNSInfo_set_descriptor( NSdesc );
+  }
+  else {
+      cNSInfo_unjoin(  );
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCelltypeInfoByName
+ * name:         eSelector_selectCelltypeInfoByName
+ * global_name:  tTECSInfoAccessor_eSelector_selectCelltypeInfoByName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCelltypeInfoByName(CELLIDX idx, const char_t* namespacePath)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sCelltypeInfo ) CTdesc;
+  if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  ercd = cTECSInfo_findCelltype( namespacePath, &CTdesc );
+  if( ercd == E_OK ){
+      cCelltypeInfo_set_descriptor( CTdesc );
+  }
+  else {
+      cCelltypeInfo_unjoin(  );
+  }
+  
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectSignatureInfoByName
+ * name:         eSelector_selectSignatureInfoByName
+ * global_name:  tTECSInfoAccessor_eSelector_selectSignatureInfoByName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectSignatureInfoByName(CELLIDX idx, const char_t* namespacePath)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sSignatureInfo ) SIGdesc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  ercd = cTECSInfo_findSignature( namespacePath, &SIGdesc );
+  if( ercd == E_OK ){
+      cSignatureInfo_set_descriptor( SIGdesc );
+  }
+  else {
+      cSignatureInfo_unjoin(  );
+  }
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectRegionInfoByName
+ * name:         eSelector_selectRegionInfoByName
+ * global_name:  tTECSInfoAccessor_eSelector_selectRegionInfoByName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectRegionInfoByName(CELLIDX idx, const char_t* regionPath)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sRegionInfo ) RGNdesc;
+  if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  ercd = cTECSInfo_findRegion( regionPath, &RGNdesc );
+  if( ercd == E_OK ){
+      cRegionInfo_set_descriptor( RGNdesc );
+  }
+  else {
+      cRegionInfo_unjoin(  );
+  }
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCellInfoByName
+ * name:         eSelector_selectCellInfoByName
+ * global_name:  tTECSInfoAccessor_eSelector_selectCellInfoByName
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCellInfoByName(CELLIDX idx, const char_t* cellPath)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sCellInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  ercd = cTECSInfo_findCell( cellPath, &desc );
+  if( ercd == E_OK ){
+      cCellInfo_set_descriptor( desc );
+  }
+  else {
+      cCellInfo_unjoin(  );
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedNamespaceInfo
+ * name:         eSelector_getSelectedNamespaceInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedNamespaceInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedNamespaceInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* num_namespace, int_t* num_celltype, int_t* num_signature)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cNSInfo_joined() ){
+      cNSInfo_getName( name, max_len );
+      *num_namespace = cNSInfo_getNNamespace( );
+      *num_signature = cNSInfo_getNSignature( );
+      *num_celltype  = cNSInfo_getNCelltype( );
+  }
+  else {
+      ercd = E_OBJ;      // cNSInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCelltypeInfo
+ * name:         eSelector_selectCelltypeInfo
+ * global_name:  tTECSInfoAccessor_eSelector_selectCelltypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCelltypeInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sCelltypeInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  cCelltypeInfo_unjoin(  );
+  if( is_cNSInfo_joined() ){
+      if( 0 <= ith && ith < cNSInfo_getNCelltype() ){
+          cNSInfo_getCelltypeInfo( ith, &desc );
+          cCelltypeInfo_set_descriptor( desc );
+      }
+      else{
+          ercd = E_PAR;  // index out of range
+      }
+  }
+  else{
+      ercd = E_OBJ;      // cNSInfo not joined
+  }
+
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectSignatureInfo
+ * name:         eSelector_selectSignatureInfo
+ * global_name:  tTECSInfoAccessor_eSelector_selectSignatureInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectSignatureInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sSignatureInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  cSignatureInfo_unjoin(  );
+  if( is_cNSInfo_joined() ){
+      if( 0 <= ith && ith < cNSInfo_getNSignature( ) ){
+          cNSInfo_getSignatureInfo( ith, &desc );
+          cSignatureInfo_set_descriptor( desc );
+      }
+      else{
+          ercd = E_PAR;  // index out of range
+      }
+  }
+  else{
+      ercd = E_OBJ;      // cNSInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCelltypeInfo
+ * name:         eSelector_getSelectedCelltypeInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedCelltypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCelltypeInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* num_attr, int_t* num_var, int_t* num_call, int_t* num_entry)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cCelltypeInfo_joined() ){
+      cCelltypeInfo_getName( name, max_len );
+      *num_attr  = cCelltypeInfo_getNAttr( );
+      *num_var   = cCelltypeInfo_getNVar( );
+      *num_call  = cCelltypeInfo_getNCall( );
+      *num_entry = cCelltypeInfo_getNEntry( );
+  }
+  else {
+      ercd = E_OBJ;      // cCelltypeInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCallInfo
+ * name:         eSelector_selectCallInfo
+ * global_name:  tTECSInfoAccessor_eSelector_selectCallInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCallInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sCallInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  cCallInfo_unjoin(  );
+  if( is_cCelltypeInfo_joined() ){
+      if( 0 <= ith && ith < cCelltypeInfo_getNCall( ) ){
+          cCelltypeInfo_getCallInfo( ith, &desc );
+          cCallInfo_set_descriptor( desc );
+      }
+      else{
+          ercd = E_PAR;  // index out of range
+      }
+  }
+  else{
+      ercd = E_OBJ;      // cCelltypeInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectEntryInfo
+ * name:         eSelector_selectEntryInfo
+ * global_name:  tTECSInfoAccessor_eSelector_selectEntryInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectEntryInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sEntryInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  cEntryInfo_unjoin(  );
+  if( is_cCelltypeInfo_joined() ){
+      if( 0 <= ith && ith < cCelltypeInfo_getNEntry( ) ){
+          cCelltypeInfo_getEntryInfo( ith, &desc );
+          cEntryInfo_set_descriptor( desc );
+      }
+      else{
+          ercd = E_PAR;  // index out of range
+      }
+  }
+  else{
+      ercd = E_OBJ;      // cCelltypeInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectAttrInfo
+ * name:         eSelector_selectAttrInfo
+ * global_name:  tTECSInfoAccessor_eSelector_selectAttrInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectAttrInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sVarDeclInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  cAttrInfo_unjoin(  );
+  if( is_cCelltypeInfo_joined() ){
+      if( 0 <= ith && ith < cCelltypeInfo_getNAttr( ) ){
+          cCelltypeInfo_getAttrInfo( ith, &desc );
+          cAttrInfo_set_descriptor( desc );
+      }
+      else{
+          ercd = E_PAR;  // index out of range
+      }
+  }
+  else{
+      ercd = E_OBJ;      // cCelltypeInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectVarInfo
+ * name:         eSelector_selectVarInfo
+ * global_name:  tTECSInfoAccessor_eSelector_selectVarInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectVarInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sVarDeclInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  cVarInfo_unjoin(  );
+  if( is_cCelltypeInfo_joined() ){
+      if( 0 <= ith && ith < cCelltypeInfo_getNVar( ) ){
+          cCelltypeInfo_getVarInfo( ith, &desc );
+          cVarInfo_set_descriptor( desc );
+      }
+      else{
+          ercd = E_PAR;  // index out of range
+      }
+  }
+  else{
+      ercd = E_OBJ;      // cCelltypeInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedAttrInfo
+ * name:         eSelector_getSelectedAttrInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedAttrInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedAttrInfo(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cAttrInfo_joined() ){
+      cAttrInfo_getName( name, max_len );
+  }
+  else{
+      ercd = E_OBJ;      // cAttrInfo not joined
+  }
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSizeIsExprOfAttr
+ * name:         eSelector_getSizeIsExprOfAttr
+ * global_name:  tTECSInfoAccessor_eSelector_getSizeIsExprOfAttr
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSizeIsExprOfAttr(CELLIDX idx, char_t* expr_str, int32_t max_len)
+{
+	CELLCB	*p_cellcb;
+  ER     ercd = E_OK;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cAttrInfo_joined() ){
+      cAttrInfo_getSizeIsExpr( expr_str, max_len );
+  }
+  else{
+      ercd = E_OBJ;      // cAttrInfo not joined
+  }
+  return ercd;
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectTypeInfoOfAttr
+ * name:         eSelector_selectTypeInfoOfAttr
+ * global_name:  tTECSInfoAccessor_eSelector_selectTypeInfoOfAttr
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectTypeInfoOfAttr(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sTypeInfo ) desc;
+  if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cAttrInfo_joined() ){
+      cAttrInfo_getTypeInfo( &desc );
+      cTypeInfo_set_descriptor( desc );
+  }
+  else{
+      ercd = E_OBJ;      // cAttrInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedVarInfo
+ * name:         eSelector_getSelectedVarInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedVarInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedVarInfo(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cVarInfo_joined() ){
+      cVarInfo_getName( name, max_len );
+  }
+  else{
+      ercd = E_OBJ;      // cVarInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSizeIsExprOfVar
+ * name:         eSelector_getSizeIsExprOfVar
+ * global_name:  tTECSInfoAccessor_eSelector_getSizeIsExprOfVar
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSizeIsExprOfVar(CELLIDX idx, char_t* expr_str, int32_t max_len)
+{
+	CELLCB	*p_cellcb;
+  ER     ercd = E_OK;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  printf( "eSelector_getSizeIsExprOfVar not supported\n" );
+
+  return ercd;
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectTypeInfoOfVar
+ * name:         eSelector_selectTypeInfoOfVar
+ * global_name:  tTECSInfoAccessor_eSelector_selectTypeInfoOfVar
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectTypeInfoOfVar(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sTypeInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cVarInfo_joined() ){
+      cVarInfo_getTypeInfo( &desc );
+      cTypeInfo_set_descriptor( desc );
+  }
+  else{
+      ercd = E_OBJ;      // cVarInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCallInfo
+ * name:         eSelector_getSelectedCallInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedCallInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCallInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* array_size)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+    if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cCallInfo_joined() ){
+      cCallInfo_getName( name, max_len );
+      *array_size = cCallInfo_getArraySize();
+  }
+  else{
+      ercd = E_OBJ;      // cCallInfo not joined
+  }
+  return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectSignatureOfCall
+ * name:         eSelector_selectSignatureOfCall
+ * global_name:  tTECSInfoAccessor_eSelector_selectSignatureOfCall
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectSignatureOfCall(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sSignatureInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cCallInfo_joined() ){
+      cCallInfo_getSignatureInfo( &desc );
+      cSignatureInfo_set_descriptor( desc );
+  }
+  else {
+      ercd = E_OBJ;      // cCallInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCallSpecifierInfo
+ * name:         eSelector_getSelectedCallSpecifierInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedCallSpecifierInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCallSpecifierInfo(CELLIDX idx, bool_t* b_optional, bool_t* b_dynamic, bool_t* b_ref_desc, bool_t* b_omit)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cCallInfo_joined() ){
+      cCallInfo_getSpecifierInfo( b_optional, b_dynamic, b_ref_desc, b_omit );
+  }
+  else {
+      ercd = E_OBJ;      // cCallInfo not joined
+  }
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCallInternalInfo
+ * name:         eSelector_getSelectedCallInternalInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedCallInternalInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCallInternalInfo(CELLIDX idx, bool_t* b_allocator_port, bool_t* b_require_port)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cCallInfo_joined() ){
+      cCallInfo_getInternalInfo( b_allocator_port, b_require_port );
+  }
+  else {
+      ercd = E_OBJ;      // cCallInfo not joined
+  }
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCallLocationInfo
+ * name:         eSelector_getSelectedCallLocationInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedCallLocationInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCallLocationInfo(CELLIDX idx, uint32_t* offset, int8_t* place)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cCallInfo_joined() ){
+      cCallInfo_getLocationInfo( offset, place );
+  }
+  else {
+      ercd = E_OBJ;      // cCallInfo not joined
+  }
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCallOptimizeInfo
+ * name:         eSelector_getSelectedCallOptimizeInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedCallOptimizeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCallOptimizeInfo(CELLIDX idx, bool_t* b_VMT_useless, bool_t* b_skelton_useless, bool_t* b_cell_unique)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cCallInfo_joined() ){
+      cCallInfo_getOptimizeInfo( b_VMT_useless, b_skelton_useless, b_cell_unique );
+  }
+  else {
+      ercd = E_OBJ;      // cCallInfo not joined
+  }
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedEntryInfo
+ * name:         eSelector_getSelectedEntryInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedEntryInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedEntryInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* array_size)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cEntryInfo_joined() ){
+      cEntryInfo_getName( name, max_len );
+      *array_size = cEntryInfo_getArraySize();
+  }
+  else{
+      ercd = E_OBJ;      // cEntryInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectSignatureOfEntry
+ * name:         eSelector_selectSignatureOfEntry
+ * global_name:  tTECSInfoAccessor_eSelector_selectSignatureOfEntry
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectSignatureOfEntry(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sSignatureInfo ) desc;
+  if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cEntryInfo_joined() ){
+      cEntryInfo_getSignatureInfo( &desc );
+      cSignatureInfo_set_descriptor( desc );
+  }
+  else {
+      ercd = E_OBJ;      // cEntryInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedEntryInlineInfo
+ * name:         eSelector_getSelectedEntryInlineInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedEntryInlineInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedEntryInlineInfo(CELLIDX idx, bool_t* b_inline)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cEntryInfo_joined() ){
+      *b_inline = cEntryInfo_isInline( );
+  }
+  else {
+      ercd = E_OBJ;      // cEntryInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedSignatureInfo
+ * name:         eSelector_getSelectedSignatureInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedSignatureInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedSignatureInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* num_function)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cSignatureInfo_joined() ){
+      cSignatureInfo_getName( name, max_len );
+      *num_function = cSignatureInfo_getNFunction( );
+  }
+  else {
+      ercd = E_OBJ;      // cSignatureInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectFunctionInfoByIndex
+ * name:         eSelector_selectFunctionInfoByIndex
+ * global_name:  tTECSInfoAccessor_eSelector_selectFunctionInfoByIndex
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectFunctionInfoByIndex(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sFunctionInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cSignatureInfo_joined() ){
+      if( 0 <= ith && ith < cSignatureInfo_getNFunction( ) ){
+          cSignatureInfo_getFunctionInfo( ith, &desc );
+          cFunctionInfo_set_descriptor( desc );
+      }
+      else {
+      }
+  }
+  else {
+      ercd = E_OBJ;      // cSignatureInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedFunctionInfo
+ * name:         eSelector_getSelectedFunctionInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedFunctionInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedFunctionInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* num_args)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cFunctionInfo_joined() ){
+      cFunctionInfo_getName( name, max_len );
+      *num_args = cFunctionInfo_getNParam( );
+  }
+  else {
+      ercd = E_OBJ;      // cFunctionInfo not joined
+  }
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectTypeInfoOfReturn
+ * name:         eSelector_selectTypeInfoOfReturn
+ * global_name:  tTECSInfoAccessor_eSelector_selectTypeInfoOfReturn
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectTypeInfoOfReturn(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sTypeInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cFunctionInfo_joined() ){
+      cFunctionInfo_getReturnTypeInfo( &desc );
+      cTypeInfo_set_descriptor( desc );
+  }
+  else {
+      ercd = E_OBJ;      // cFunctionInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedParamInfo
+ * name:         eSelector_getSelectedParamInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedParamInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedParamInfo(CELLIDX idx, char_t* name, int_t max_len, int8_t* dir)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cParamInfo_joined() ){
+      cParamInfo_getName( name, max_len );
+      cParamInfo_getDir( dir );
+  }
+  else {
+      ercd = E_OBJ;      // cParamInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectParamInfo
+ * name:         eSelector_selectParamInfo
+ * global_name:  tTECSInfoAccessor_eSelector_selectParamInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectParamInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sParamInfo ) desc;
+  if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cFunctionInfo_joined() ){
+      if( 0 <= ith && ith < cFunctionInfo_getNParam() ){
+          cFunctionInfo_getParamInfo( ith, &desc );
+          cParamInfo_set_descriptor( desc );
+      }
+      else{
+          ercd = E_PAR;  // index out of range
+      }
+  }
+  else {
+      ercd = E_OBJ;      // cFunctionInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectTypeInfoOfParam
+ * name:         eSelector_selectTypeInfoOfParam
+ * global_name:  tTECSInfoAccessor_eSelector_selectTypeInfoOfParam
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectTypeInfoOfParam(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sTypeInfo ) desc;
+  if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cParamInfo_joined() ){
+      cParamInfo_getTypeInfo( &desc );
+      cTypeInfo_set_descriptor( desc );
+  }
+  else {
+      ercd = E_OBJ;      // cFunctionInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedTypeInfo
+ * name:         eSelector_getSelectedTypeInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedTypeInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedTypeInfo(CELLIDX idx, char_t* name, int_t max_len, int8_t* kind)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cTypeInfo_joined() ){
+      cTypeInfo_getName( name, max_len );
+      *kind = cTypeInfo_getKind( );
+  }
+  else {
+      ercd = E_OBJ;      // cTypeInfo not joined
+  }
+  return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectTypeInfoOfType
+ * name:         eSelector_selectTypeInfoOfType
+ * global_name:  tTECSInfoAccessor_eSelector_selectTypeInfoOfType
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectTypeInfoOfType(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sTypeInfo ) desc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cTypeInfo_joined() ){
+      cTypeInfo_getTypeInfo( &desc );
+      cTypeInfo_set_descriptor( desc );
+  }
+  else {
+      ercd = E_OBJ;      // cTypeInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedRegionInfo
+ * name:         eSelector_getSelectedRegionInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedRegionInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedRegionInfo(CELLIDX idx, char_t* name, int_t max_len, int_t* num_cell)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cRegionInfo_joined() ){
+      cRegionInfo_getName( name, max_len );
+      *num_cell = cRegionInfo_getNCell();
+  }
+  else {
+      ercd = E_OBJ;      // cNSInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCellInfo
+ * name:         eSelector_selectCellInfo
+ * global_name:  tTECSInfoAccessor_eSelector_selectCellInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCellInfo(CELLIDX idx, int_t ith)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sCellInfo ) desc;
+  if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cRegionInfo_joined() ){
+      if( 0 <= ith && ith < cRegionInfo_getNCell() ){
+          cRegionInfo_getCellInfo( ith, &desc );
+          cCellInfo_set_descriptor( desc );
+      }
+      else {
+          ercd = E_PAR;
+      }
+  }
+  else {
+      ercd = E_OBJ;      // cNSInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getSelectedCellInfo
+ * name:         eSelector_getSelectedCellInfo
+ * global_name:  tTECSInfoAccessor_eSelector_getSelectedCellInfo
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getSelectedCellInfo(CELLIDX idx, char_t* name, int_t max_len)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cCellInfo_joined() ){
+      cCellInfo_getName( name, max_len );
+  }
+  else {
+      ercd = E_OBJ;      // cNSInfo not joined
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_selectCelltypeInfoOfCell
+ * name:         eSelector_selectCelltypeInfoOfCell
+ * global_name:  tTECSInfoAccessor_eSelector_selectCelltypeInfoOfCell
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_selectCelltypeInfoOfCell(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+  Descriptor( nTECSInfo_sCelltypeInfo ) desc;
+  if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cCellInfo_joined() ){
+      cCellInfo_getCelltypeInfo( &desc );
+      cCelltypeInfo_set_descriptor( desc );
+  }
+  else {
+      ercd = E_OBJ;      // cNSInfo not joined
+  }
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getAttrValueInStr
+ * name:         eSelector_getAttrValueInStr
+ * global_name:  tTECSInfoAccessor_eSelector_getAttrValueInStr
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getAttrValueInStr(CELLIDX idx, char_t* buf, int_t max_len)
+{
+	ER		  ercd = E_OK;
+	CELLCB	*p_cellcb;
+  uint32_t offset;
+  void     *base, *ptr;
+  int8_t   place;
+
+  Descriptor( nTECSInfo_sCelltypeInfo ) CTdesc;
+  if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( is_cCellInfo_joined() && is_cAttrInfo_joined() ){
+      cCellInfo_getCelltypeInfo( &CTdesc );
+      cCelltypeInfo_set_descriptor( CTdesc );
+      printf( "eSelector_getAttrValueInStr not supported\n" );
+      cAttrInfo_getLocationInfo( &offset, &place );
+      switch( place ){
+      case VARDECL_PLACE_CB:
+          cCellInfo_getCBP( &base );
+          break;
+      case VARDECL_PLACE_INIB:
+          cCellInfo_getINIBP( &base );
+          break;
+      default:
+          base = (void *)0;
+      };
+      if( base ){
+          ptr = base + offset;
+          eSelector_selectTypeInfoOfAttr(idx);
+          getSelectedTypeValue( p_cellcb, ptr, buf, max_len );
+      }
+      else {
+          strncpy( buf, "(OMITTED)", max_len );
+      }
+  }
+  else{
+      ercd = E_OBJ;
+  }
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getAttrSizeIsValue
+ * name:         eSelector_getAttrSizeIsValue
+ * global_name:  tTECSInfoAccessor_eSelector_getAttrSizeIsValue
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getAttrSizeIsValue(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  printf( "eSelector_getAttrSizeIsValue not supported\n" );
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getVarValueInStr
+ * name:         eSelector_getVarValueInStr
+ * global_name:  tTECSInfoAccessor_eSelector_getVarValueInStr
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getVarValueInStr(CELLIDX idx, char_t* buf, int_t max_len)
+{
+	ER        ercd = E_OK;
+	CELLCB    *p_cellcb;
+  int8_t    place;
+  void      *base, *ptr;
+  uint32_t  offset;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  cVarInfo_getLocationInfo( &offset, &place );
+  switch( place ){
+  case VARDECL_PLACE_CB:
+      cCellInfo_getCBP( &base );
+      break;
+  case VARDECL_PLACE_INIB:
+      cCellInfo_getINIBP( &base );
+      break;
+  default:
+      base = (void *)0;
+  };
+  if( base ){
+      ptr = base + offset;
+      eSelector_selectTypeInfoOfVar(idx);
+      getSelectedTypeValue( p_cellcb, ptr, buf, max_len );
+  }
+  else {
+      strncpy( buf, "(OMITTED)", max_len );
+  }
+  printf( "eSelector_getVarValueInStr not supported\n" );
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eSelector_getVarSizeIsValue
+ * name:         eSelector_getVarSizeIsValue
+ * global_name:  tTECSInfoAccessor_eSelector_getVarSizeIsValue
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+ER
+eSelector_getVarSizeIsValue(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  printf( "eSelector_getVarSizeIsValue not supported\n" );
+
+	return(ercd);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
+
+static void
+getSelectedTypeValue( CELLCB *p_cellcb, void *ptr, char_t *buf, int_t max_len )
+{
+    switch( cTypeInfo_getKind() ){
+    case TECSTypeKind_BoolType:
+        snprintf( buf, max_len, "%d", *(bool_t *)ptr );
+        break;
+    case TECSTypeKind_IntType:
+        switch( cTypeInfo_getSize() ){
+        case 8:
+            snprintf( buf, max_len, "%d", *(int8_t *)ptr );
+            break;
+        case 16:
+            snprintf( buf, max_len, "%d", *(int16_t *)ptr );
+            break;
+        case 32:
+            snprintf( buf, max_len, "%d", *(int32_t *)ptr );
+            break;
+        case 64:
+            snprintf( buf, max_len, "%lld", *(int64_t *)ptr );
+            break;
+        default:
+            snprintf( buf, max_len, "unknown int size(%d)", cTypeInfo_getSize() );
+        };
+    case TECSTypeKind_FloatType:
+        switch( cTypeInfo_getSize() ){
+        case 32:
+            snprintf( buf, max_len, "%g", *(float32_t *)ptr );
+            break;
+        case 64:
+            snprintf( buf, max_len, "%g", *(double64_t *)ptr );
+            break;
+        default:
+            snprintf( buf, max_len, "unknown double size(%d)", cTypeInfo_getSize() );
+        };
+    case TECSTypeKind_PtrType:
+        snprintf( buf, max_len, "%X", *(double64_t *)ptr );
+        break;
+    case TECSTypeKind_ArrayType:        break;
+    case TECSTypeKind_DefinedType:      break;
+    case TECSTypeKind_StructType:       break;
+    case TECSTypeKind_EnumType:         break;
+    case TECSTypeKind_VoidType:         break;
+    case TECSTypeKind_DescriptorType:   break;
+    default:                            break;
+    };
+}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/README-TLSF.txt
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/README-TLSF.txt	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/README-TLSF.txt	(revision 374)
@@ -0,0 +1,23 @@
+TLSF Malloc アロケータ
+                                          2017.4.15
+                                          大山
+1.概要
+
+TLSF は効率よく、フラグメントが起きにくいアロケータです。 OS 非依存に
+実装されているため、組込みシステムへの応用に適しています。この実装では
+排他制御を行っていません。複数のタスクで共用するには、排他制御を行う必
+要があります。
+
+2. 実装について
+
+1) TLSF アロケータの本体は、TECS ジェネレータパッケージには含まれていません。
+以下に公開されている TLSF を入手する必要があります。
+これは GPL/LGPL ライセンスで公開されています。
+  http://www.gii.upv.es/tlsf/main/docs
+
+2) TLSF には、別に実装され MIT ライセンスで公開されているものもあります。
+API が若干異なるため、tTLSFMalloc_inline.h を少し修正する必要があります。
+  https://github.com/mattconte/tlsf
+
+3) ETロボコン用パッケージ
+mruby-on-ev3rt+tecs_package (ev3rt) には、1) の TLSF が含まれています。
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc.cdl	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc.cdl	(revision 374)
@@ -0,0 +1,56 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+import( <sMalloc.cdl> );
+
+celltype tTLSFMalloc {
+    [inline]
+        entry  sMalloc  eMalloc;
+    attr {
+        /* memory pool size in bytes */
+        size_t  memoryPoolSize;
+    };
+    var {
+        /*
+         * メモリプール
+         *
+         * size_is の引数に関する補足説明
+         *  pool の型が uint64_t のため sizeof uint64_t (8) で割っている
+         *  memoryPoolSize が 8 の倍数でない場合、メモリ領域が不足しないよう +7 を加算してから除する
+         */
+        [size_is( (memoryPoolSize+7) / 8 )]
+            uint64_t   *pool;
+    };
+};
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc_inline.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc_inline.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc_inline.h	(revision 374)
@@ -0,0 +1,152 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+#ifndef tTLSFMalloc__INLINE_H
+#define tTLSFMalloc__INLINE_H
+
+#include "tlsf.h"
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * memoryPoolSize   size_t           ATTR_memoryPoolSize
+ * pool             uint64_t*        VAR_pool        
+ *
+ * #[</PREAMBLE>]# */
+
+/* #[<ENTRY_PORT>]# eMalloc
+ * entry port: eMalloc
+ * signature:  sMalloc
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eMalloc_initializeMemoryPool
+ * name:         eMalloc_initializeMemoryPool
+ * global_name:  tTLSFMalloc_eMalloc_initializeMemoryPool
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline int
+eMalloc_initializeMemoryPool(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+	} /* end if VALID_IDX(idx) */
+
+  return init_memory_pool(ATTR_memoryPoolSize, VAR_pool);
+}
+
+/* #[<ENTRY_FUNC>]# eMalloc_calloc
+ * name:         eMalloc_calloc
+ * global_name:  tTLSFMalloc_eMalloc_calloc
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline void*
+eMalloc_calloc(CELLIDX idx, size_t nelem, size_t elem_size)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+	} /* end if VALID_IDX(idx) */
+
+  return calloc_ex( nelem, elem_size, VAR_pool);
+}
+
+/* #[<ENTRY_FUNC>]# eMalloc_malloc
+ * name:         eMalloc_malloc
+ * global_name:  tTLSFMalloc_eMalloc_malloc
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline void*
+eMalloc_malloc(CELLIDX idx, size_t size)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+	} /* end if VALID_IDX(idx) */
+
+  return malloc_ex(size, VAR_pool);
+
+}
+
+/* #[<ENTRY_FUNC>]# eMalloc_realloc
+ * name:         eMalloc_realloc
+ * global_name:  tTLSFMalloc_eMalloc_realloc
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline void*
+eMalloc_realloc(CELLIDX idx, const void* ptr, size_t new_size)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+	} /* end if VALID_IDX(idx) */
+
+  return realloc_ex((void *)ptr, new_size, VAR_pool);
+}
+
+/* #[<ENTRY_FUNC>]# eMalloc_free
+ * name:         eMalloc_free
+ * global_name:  tTLSFMalloc_eMalloc_free
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline void
+eMalloc_free(CELLIDX idx, const void* ptr)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+	} /* end if VALID_IDX(idx) */
+
+  return free_ex((void *)ptr, VAR_pool);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
+
+#endif /* tTLSFMalloc_INLINEH */
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/README-mruby.txt
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/README-mruby.txt	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/README-mruby.txt	(revision 374)
@@ -0,0 +1,62 @@
+mruby
+                                              2017.4.17  新規
+                                              2017.11.4  
+                                              大山 博司
+
+■概要
+
+mruby ディレクトリには、組込み用 mruby VM のセルタイプ、および
+MrubyBridgePlugin に対応したモジュールが含まれます．
+
+mruby V1.2.0 に対応しています．V1.1.0 でもビルドすることは可能です．
+
+ここには mruby の本体は含まれません．以下からダウンロードする必要があります．
+   http://forum.mruby.org/
+
+■TECS ジェネレータ V1.5 での変更
+
+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 に置き換え可能だが、以下の点でビルド用 Makefile の変更が必要．
+ * TLSF ヘッダ tTLSFMalloc_inline.h へのパスを追加
+ * TLSF のオブジェクトの追加 (mruby+TECS on EV3 には実装済み)
+
+また、以下の点に留意する必要がある．
+ * TLSF は、VM ごとに 1MB を割り付ける 
+
+このため、十分な空きメモリが必要である．
+このサイズは VM セルの定義で変更可能 (属性 memoryPoolSize)．
+
+■ コンポーネント概要
+
+tMruby.cdl: (TECS ジェネレータ V1.5.0 以降)
+ celltype  tMrubyVM
+    VM を実装するためのセルタイプ．メモリアロケータ TLSFMalloc を含ま
+    ない. 受け口 eMrubyVM のシグニチャは sMruby．
+
+ composite tMruby
+    受け口 eMrubyBody のシグニチャを sTaskBody とする．tTLSFMalloc も
+    組み入れ.
+
+ composite tMrubyCyclic
+    受け口 eMrubyBody のシグニチャを sTaskBody とする．tTLSFMalloc も
+    組み入れ.
+    周期タスク起床を前提としている．
+    一回目の呼出しでは mrb_open し、ブリッジセルを登録後、mrb_run を呼
+    び出してスクリプト実行を行う．スクリプト終了後に mrb_close は呼び
+    出されない．
+    二回目以降の呼出しでは mrb_run のみ呼び出される．
+    終了処理 mrb_close を呼びだす手段は提供していない．突然電源が切ら
+    れることを前提としている． (少なくとも最初の実装では)．
+
+sMruby.cdl：
+ signature sMruby
+   初期化、実行、終了処理に分解したシグニチャ
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/TECSPointer.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/TECSPointer.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/TECSPointer.h	(revision 374)
@@ -102,6 +102,6 @@
 	{																	\
 		if( sizeof( type ) > sizeof( mrb_int ) ){						\
-			if( val >= (((type)1) << (sizeof(mrb_int)*8-1))				\
-				|| val < -(((type)1) << (sizeof(mrb_int)*8-1)) )		\
+			if( val > TYPE ## _MAX				\
+				|| val < TYPE ## _MIN )		\
 				/* '=' unecessary for negative value	*/				\
 				/* ignore warning on int32_t */							\
@@ -126,5 +126,5 @@
 	{																	\
 		if( sizeof( type ) > sizeof( mrb_int ) ){						\
-			if( val >= (((type)1) << (sizeof(mrb_int)*8)))				\
+      if( val > TYPE ## _MAX )                        \
 				/* '=' unecessary for negative value	*/				\
 				/* ignore warning on int32_t */							\
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyBridge.txt
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyBridge.txt	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyBridge.txt	(revision 374)
@@ -0,0 +1,366 @@
+MrubyBridgePlugin に関するメモ
+										2012年11月 7日　初版作成
+										2013年 5月26日　見直し
+                                                        大山　博司
+
+【概要】
+
+MrubyBridgePlugin は、TECS CDL の signature 記述に基づき、mruby と TECS 
+コンポーネントをブリッジする、mruby の C 言語実装クラスであり TECS のセ
+ルタイプとなるコンポーネントを生成する、TECS のシグニチャプラグインであ
+る。
+
+【構造】
+
+         +--------------------------+              +-------------------+
+         |     (ブリッジセル)         |              |    (目的セル)      |
+         |                          |              |                   |
+mruby    | nMruby::tsSignatureBridge|  sSignature  |  tTargetCelltype  |
+ - - - > |       BridgeCell         |--------------|>   TargetCell     |
+         |                          |cTECS    eTest|                   |
+         | mruby クラス：            |              |                   |
+         |  TECS::TSignatureBridge  |              |                   |
+         +--------------------------+              +-------------------+
+
+MrubyBridgePlugin は、mruby から TECS へブリッジをするセルタイプを生成
+する。mruby=>TECS をブリッジするセルは、そのセルタイプのセルとして、プ
+ラグインの利用者が CDL 内に設置し、mruby から操作したいセル、すなわち
+目的セルに結合する。
+
+このセルタイプは、mruby のクラスの定義を行い、ブリッジセルを mruby の
+インスタンスとして取り扱えるようにし、mruby のインスタンスメソッドの呼
+び出しに応じて、目的セルの受け口関数を呼び出す働きを持つ。
+
+【簡単な使用例】
+
+簡単な使用例は、SimpleSample.cdl および SimpleSample.rb にある。
+MrubyBrigePlugin はシグニチャプラグインであり、シグニチャプラグインの
+使用方法を理解していれば、これらのソースファイルのコメントを参照するこ
+とで、MrubyBrigePlugin の大よその使い方は理解できるはずである。
+以下の方法で、ビルドおよび実行できる。
+
+   % make                             # mruby 本体のビルド (.a を作成)
+   % cd MrubyBridge                   # MrubyBridge へ移動
+   % make                             # ビルド
+   % ./mruby-Sample SimpleSample.rb   # 実行
+
+【Makefile の構成】
+
+tecsgen により生成される gen/Makefile.templ に対し、以下の変更を加える必要があ
+る。
+
+・gen/Makefile.temp は、一つ上のディレクトリへ Makefile という名前で置
+  けば、cygwin などの POSIX 環境で試験実行する場合には、無調整で使用で
+  きるように生成される(ただし gnu make を使用する)
+・tSysLog を使う場合、リロケータブルオブジェクトを追加 (下行参照)
+   OTHER_OBJS = $(_TECS_OBJ_DIR)vasyslog.o
+
+【データ型】
+
+MrubyBridgePlugin は、以下の TECS の型を扱うことができる (制限される)。
+この制限は、MrubyBridgePlugin を適用しようとするシグニチャに対するものであり、
+それ以外へ制限がおよぶものではない。
+
+ スカラー型			bool_t, char_t, intN_t, double64_t, float32_t
+									(N=8,16,32,64)
+					int, short, long, char (TECS 非推奨の型)
+
+ ポインタ型			bool_t*, char_t*, intN_t*, double64_t*, float32_t*
+					int*, short*, long*, char*
+					構造体型へのポインタ（構造体型と同じ制限あり）
+
+                    これらは、ポインタの指している先の値を扱うためのも
+                    のである。ポインタ値(アドレス)を渡したい場合には、
+                    これらを使用できない。代わりに intptr_t, uintptr_t 
+                    を使用する。
+
+ 					size_is, string 指定子あり/なしのいずれも扱える。
+					ただし構造体型へのポインタに size_is 指定されたも
+					のは扱えない。(仕様書に明言されていないが構造体ポ
+					インタの string は、元々サポートされない)
+
+					string の長さ指定がない場合、in 引数に対してのみ用
+					いることができる。
+
+ 構造体型			メンバは、スカラー型でなくてはならない
+
+ typedef型          上記のスカラー型、構造体型、ポインタ型の typedef 
+                    された型を扱うことができる。元の型として扱われる。
+					このためポインタ型や構造体型の場合、元の型名により
+					これらを扱うための mruby クラスを指定する。
+
+【対応する mruby の型(クラス)】
+
+  bool_t			true または false。
+					mruby で false と見なされるもの(false または nil) 
+					を C の false として扱う。mruby で false と見なさ
+					れないものを C の true として扱う。整数値 0 は、
+					mruby では false とは見なされない。
+  char_t			FIXNUM  (値は 0..255)		
+  schar_t			FIXNUM  (値は -128..127)		
+  uchar_t			FIXNUM  (値は 0..255)		
+  intN_t			FIXNUM
+  uintN_t			FIXNUM
+  double64_t		FLOAT (mruby の FLOAT が double か float かは実装
+                          による)
+  float32_t			FLOAT
+  int				FIXNUM
+  short				FIXNUM
+  long				FIXNUM
+  char				FIXNUM  (char_t と同じ)
+
+・TECS 専用のクラスを用いるもの
+
+  bool_t*			TECS::BoolPointer
+  char_t*			TECS::CharPointer
+  uchar_t*			TECS::UCharPointer
+  schar_t*			TECS::SCharPointer
+  intN_t*			TECS::IntNPointer   N:8,16,32,64
+  uintN_t*			TECS::UIntNPointer  N:8,16,32,64
+  float32_t*		TECS::Float32Pointer
+  double64_t*		TECS::Double64Pointer
+  int*				TECS::IntPointer
+  short*			TECS::ShortPointer
+  long*				TECS::LongPointer
+  char*				TECS::CharPointer  (char_t* と同じ)
+
+  struct TAG		TECS:TECSStructTAG
+  struct TAG*		TECS:TECSStructTAG
+                    TAG の部分は、構造体のタグ名に置き換える。関数への
+                    引数として、構造体を渡すか、構造体へのポインタを渡
+                    すかは、プラグインが自動で判定する。TAG 名を付けて
+                    いない構造体を扱うことはできない。typedef した名前
+                    で構造体を扱うことはできない。
+
+・その他
+
+  void * は扱えない
+  intptr_t は、通常 stdint.h で typedef されているが、元の型として扱う
+
+プラグイン引数として ignoreUnsigned=true を指定すると、無符号整数型へ
+のポインタ型を有符号整数型のポインタ型として扱う（値の範囲チェックを含
+む）。ポインタを扱うクラスのメモリ使用量を抑えること、有符号、無符号の
+使い分けをルーズにすることができる。
+
+ビルド時のオプション (C 言語のマクロ定義) TECS_NO_VAL_CHECK を指定する
+ことで、値の範囲チェックを行わないようにすることができる。
+
+【関数名】
+
+・関数名に関数する制限
+
+  関数名 initialize は ruby で既定のメソッド名と重複するため、initialize_cell
+ に置換される。
+
+  initialize と initialize_cell の両方が signature 内に存在する場合、エラーと
+  なる。エラーを解消するには、少なくとも一方の名前を変更する必要がある。
+
+【戻り値】
+
+戻り値で扱えるのは、以下の型に限られる。
+
+   void, bool_t, char_t, intN_t, float32_t, double64_t
+   int, short, long, char
+   元の型が、これらである typedef された型
+
+【引数】
+
+・順序の通り対応する mruby の型（クラス）の値を引数として渡す
+・指定可能な基本指定子  in, inout, out  (send/receive は不可)
+・例外の発生
+  ・整数の値が、引数の型の範囲を超えている場合、例外を発生する。
+    無符号型の場合、負の値を取ることはできない。ただし、mrb_int と同じ
+    またはそれ以上のサイズの場合には、負の値が指定されても例外とはしな
+    い。さもないと最上位ビットが 1 の値を入力できないため。
+    char_t (char) は無符号と見なされる。
+    なお uintptr_t に 0x80000000 にを渡す際に RangeError 例外が発生す
+    るが、これは mruby によるものであり、TECS による制限ではない
+  ・ポインタ型や構造体型に対応する mruby の型(クラス) と一致しない
+  ・size_is, string のサイズが小さい
+
+【参考】
+
+ TECSPointer.txt
+
+  以下の mruby クラス、すなわち TECS のポインタ値を扱うためのクラスに
+  ついての説明。
+　これらのクラスは必要に応じて生成される。引数として使用されていないク
+  ラスは生成されない。
+
+  TECS::Int8Pointer,   TECS::Int16Pointer,   TECS::Int32Pointer
+  TECS::Int64Pointer,  TECS::UInt64Pointer
+  TECS::UInt8Pointer,  TECS::UInt16Pointer,  TECS::UInt32Pointer
+  TECS::CharPointer,   TECS::SCharPointer,   TECS::UCharPointer
+  TECS::IntPointer,    TECS::ShortPointer,   TECS::LongPointer
+  TECS::UIntPointer,   TECS::UShortPointer,  TECS::ULongPointer
+  TECS::BoolPointer,   TECS::Float32Pointer, TECS::Double64Pointer
+
+ TECSStruct.txt
+
+  以下の mruby クラス、すなわち TECS の構造体（ポインタ）値を扱うため
+  のクラスについての説明。
+
+  TECS::StructTAG
+
+【TECS CDLによる記述】
+
+ ブリッジプラグインにより、ブリッジセルタイプが自動生成される。
+ ブリッジセルは、CDL に記述して設置する必要がある
+
+・ブリッジプラグインの呼出し
+
+mruby=>TECS ブリッジプラグインは、シグニチャプラグインである。CDL 上の以下のよ
+うな記述により、mruby=>TECS ブリッジプラグインを呼び出す。
+
+  ex)
+    generate( MrubyBridgePlugin, sSignature, "" );
+
+ シグニチャ sSignature は、この記述よりも前に定義されていなくてはならない。
+ この generate の記述により、次のようなブリッジセルタイプが生成される。
+
+generate の第3引数は、プラグイン引数（オプション）である。
+
+  ignoreUnsigned   true を指定すると無符号整数へのポインタ型に有符号のポ
+                   インタクラスを使用する（メモリを節約できる）
+                   デフォルトは false である。
+  include          ブリッジに含める関数を指定する。exclude と同時指定不可。
+  exclude          ブリッジに含める関数を指定する。include と同時指定不可。
+
+  ex)
+    generate( MrubyBridgePlugin, sSignature, "exclude=fun99" );
+
+多くの関数を指定する場合、以下のように、分割した文字列の連接として師定
+することができます。
+
+  ex)
+    generate( MrubyBridgePlugin, sSignature,
+        "ignoreUnsigned=true, "
+        "include='func1,func2', "
+        "include='func3,func4', "
+     );
+
+・ブリッジセルタイプ
+
+ ブリッジセルタイプは、ネームスペース nMruby の下に作られる。ブリッジ
+セルタイプの名前は、シグニチャ名に 't' を前置きしたものである。以下は、
+ブリッジプラグインにより自動生成されるセルタイプのコードの例である。シ
+グニチャ sSignature に対するブリッジセルタイプ名は tsSignature であり、
+呼び口cTECS を持つ。
+
+  ex) 自動生成される CDL コード（内部で生成され、解釈される）
+
+   namespace nMruby {
+     celltype SSignature{
+       call sSignature cTECS;
+     };
+   };
+
+・ブリッジセルの設置
+
+ ブリッジセルは、ブリッジセルタイプのセルとして生成する。ブリッジセル
+ の設置は CDL の記述者が行うものである。ブリッジセルの呼び口 cTECS を 
+ mRuby から呼び出したいセルへ結合する。
+
+  ex) ブリッジセルを設置する CDL 記述
+
+   cell nMruby::tsSignature BridgeCell {
+     cTECS = Cell.eEnt;
+   };
+
+  ex) ブリッジセルを設置する CDL 記述(VM 名指定あり)
+
+   cell nMruby::tsSignature BridgeCell {
+     cTECS = Cell.eEnt;
+	 VMname = "VM2";
+   };
+
+  VMname は mruby VM のセルの名前の指定である。VMname を指定しない場合、
+  "VM" が仮定される。VMname は、実際には、VM_TECSInitializer などのよ
+  うに、ブリッジを登録するセルの、セル名に用いられる。tecsgen 実行時に
+  以下のようなメッセージが出力される。受け口 
+  VM_TECSInitializer.eInitialize へ VM の初期化用呼び口から結合する。
+
+   MrubyBridgePlugin: join your VMs cInitialize to VM_TECSInitializer.eInitialize
+
+【mruby コード】
+
+ ブリッジプラグインが適用されたシグニチャに対応する mruby クラスが生成
+ される。これをブリッジクラスと呼ぶ。
+ ブリッジクラスを通してセルの受け口関数を呼び出すことができる。
+
+・ブリッジクラス
+
+ ブリッジクラスは、モジュール TECS の下に作成される。ブリッジクラスの
+ 名前は、シグニチャ名に 'T' を前置きしたものとなる。
+
+ ex)  TECS::TsSignature
+
+・ブリッジのインスタンス
+
+  ブリッジクラスにて、ブリッジセル名を引数として new することで、ブリッ
+  ジクラスのインスタンスが生成される。ブリッジクラスのインスタンスのこ
+  とを、短かくブリッジのインスンタンスとも呼ぶ。ブリッジのインスタンス
+  は、ブリッジセルへのポインタ情報を保持するだけである。同一のブリッジ
+  のインスタンスは何度でも生成することができる。
+
+ ex)  brdige = TECS::TsSignature.new( "CellName" )
+
+【残課題】
+
+[済] 整数型の unsigned の扱い
+   キャストをしているので、コンパイルは警告なく通る。
+   値の範囲チェックと整合していない。
+   以下を新たに設けるか。
+   UInt8Pointer, UInt16Pointer, UInt32Pointer, UInt64Pointer
+   UIntPointer, UShortPointer, ULongPointer, UCharPointer, SCharPointer, 
+
+[済] 値の範囲のチェック
+   TECSPointer, TECSStruct では整数値を設定する際に、範囲チェックがある。
+   メソッドへの直接の引数はチェックされない。
+
+[済] 現状の so としての実装はおかしい
+   静的に mruby の本体が結合されている。
+
+[済] ポインタ型を扱うクラスが多すぎる
+   使用するクラスだけロードされ、初期化される仕組みが欲しい。
+
+・以下の方法でブリッジを割り付けているが、
+    bridge = TsSample.new( "SimpleBridge" )
+　以下のように、定数として扱うことができる方がスマートである。
+    bridge = TECS::SimpleBridge
+  (現状の方が、ブリッジのセルタイプがわかる点が優れている)
+  ⇒ もし定数として扱うとして、割付けを C で行うか ruby コードで行うか
+     の違いでしかない。以下にあるラッパークラスにより定数の初期化を行
+     えばよい。
+  ⇒ 定数として扱うと、オブジェクトが最初から最後まで消えないという問
+     題がある(それでも少量であるが)
+
+・上記に関連して、VM が異なる場合に、他の VM に割り付けたブリッジ名が
+  見えてしまう。アクセス制限が十分でない。
+  ブリッジ名のアクセス制限を実現するには、VM を識別する情報が必要にな
+  る。mrb_state に p_cellcb を加える方法、mrb_state自身で区別する方法
+  が考えられる。要検討。
+  なお、セルタイプ単位でのアクセス制 限はできている(てきていないのは、
+  同じセルタイプで複数のブリッジセルがある場合に、ブリッジ名のアクセス
+  制限)。
+
+・typedef された型名でアクセスできると便利である
+  TECSPointer や TECSStruct のクラスに対する alias により、別名として
+  アクセスできるとよい。
+   ⇒ とりあえず、MrubyBridgePlugin のメッセージとしてわかるようにした。
+
+・send/receive への対応
+  mruby と共通のアロケータを指定可能とする (アロケータコンバータプラグインを新規に設けては?)
+
+・構造体メンバーの型制限の緩和
+   strign or size_is 指定された char* など
+
+・ruby らしいプログラムから mruby ⇒ TECS ブリッジのクラスへの自動変換するラッパークラスの生成
+  (ruby's Array => TECS::Pointer, ruby's Struct => TECS::StructTAG)
+
+[済]ブリッジクラスの new でセルが見つからなかった場合、ruby 例外を発生させる。
+  これを free する段階で SEGV が発生するため DATA_SET を早めに行うように変更。
+  なお、各メソッドの関数で DATA_PTR が null かどうかをチェックしないが、
+  例外が発生したことにより不完全なブリッジは変数に記憶されない（はず）
+  ため、問題ない。
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyTECSPointer.txt
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyTECSPointer.txt	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyTECSPointer.txt	(revision 374)
@@ -0,0 +1,106 @@
+TECS::Int8Pointer       TECS::UInt8Pointer
+TECS::Int16Pointer      TECS::UInt16Pointer
+TECS::Int32Pointer      TECS::UInt32Pointer
+TECS::Int64Pointer      TECS::UInt64Pointer
+TECS::CharPointer       TECS::SCharPointer      TECS::UCharPointer
+TECS::IntPointer	    TECS::UIntPointer
+TECS::ShortPointer	    TECS::UShortPointer
+TECS::LongPointer       TECS::ULongPointer
+TECS::BoolPointer
+TECS::Float32Pointer
+TECS::Double64Pointer
+
+TECS のポインタ型の整数データ、浮動小数点データ、文字データを扱うため
+の記憶域を扱います。これらのクラスは、シグニチャで使用されているものを 
+MrubyBridgePlugin プラグインが自動判別して生成します。
+
+ポインタ値そのものを渡すには intptr_t 型として渡すのが妥当です。
+
+C 言語の型とは、以下のように対応します。
+
+   int8_t                 TECS::Int8Pointer
+   int16_t                TECS::Int16Pointer
+   int32_t                TECS::Int32Pointer
+   int64_t                TECS::Int64Pointer
+   char_t                 TECS::CharPointer
+   schar_t                TECS::SCharPointer
+   uchar_t                TECS::UCharPointer
+   uint8_t                TECS::UInt8Pointer
+   uint16_t               TECS::UInt16Pointer
+   uint32_t               TECS::UInt32Pointer
+   uint64_t               TECS::UInt64Pointer
+   bool_t                 TECS::BoolPointer
+   float32_t              TECS::Float32Pointer
+   double64_t             TECS::Double64Pointer
+
+ 非推奨の型
+   char                   TECS::CharPointer
+   int                    TECS::IntPointer
+   short                  TECS::ShortPointer
+   long                   TECS::LongPointer
+   signed char            TECS::SCharPointer
+   unsigned char          TECS::UCharPointer
+   unsigned int           TECS::UIntPointer
+   unsigned short         TECS::UShortPointer
+   unsigned long          TECS::ULongPointer
+   float                  TECS::Float32Pointer
+   double                 TECS::Double64Pointer
+
+char, signed char, unsgined char は char_t, schar_t, uchar_t と見なされます。
+
+【備考】
+ターゲット環境において char, singed char, unsigned char のサイズが 1 バイトでは無い場合には、相違が生じる。
+
+== スーパークラス ==
+
+Object
+
+== クラスメソッド ==
+
+new( size )
+
+  size の大きさを持つ記憶域を指すポインタを生成して返します。
+  size の単位は、要素の個数です。
+
+== メソッド ==
+
+self[ nth ]
+
+  nth 番目の要素を返します。nth は 0..(length-1) の整数です。
+  '=' の左辺では、nth 番目の要素を右辺の値に置き換えます。
+
+  nth に整数または浮動小数以外を渡した場合、例外が発生します。
+
+self[ nth ] = val
+
+  整数型のポインタの場合、値の範囲がチェックされます。
+  val の値が範囲を超える場合、例外が発生します。
+
+value
+
+  ポインタの指す先の値を取り出します。
+  self[0] と同じです。
+
+value = val
+
+  ポインタの指す先に値を設定します。
+  self[0] = val と同じです。
+
+length
+size
+
+  ポインタが指す要素の個数を返します。
+
+to_s
+
+  CharPointer クラスでのみ使用できます。
+  mruby の String クラスのインスタンスに変換して返します。
+
+from_s
+
+  CharPointer クラスでのみ使用できます。
+  mruby の文字列から CharPointer の指す記憶域に文字列をコピーします。
+  
+  new の際に確保された記憶域が用いられます。記憶域の大きさが文字列よりも短い場合には、記憶域の大きさに収まるようにコピーされます。
+  記憶域よりも文字列が長い場合、記憶域の末尾に終端文字 '\0' は置かれません。
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyTECSStruct.txt
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyTECSStruct.txt	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyTECSStruct.txt	(revision 374)
@@ -0,0 +1,24 @@
+TECS::StructTAG
+
+  C 言語の構造体を扱うためのクラスであり、signature に現れる構造体に合わせて MrubyBridgePlugin により生成されます。
+  TAG の部分は、構造体のタグ名に置き換えます。
+
+== スーパークラス ==
+
+Object
+
+== クラスメソッド ==
+
+new()
+
+== メソッド ==
+
+MEMBER
+
+  構造体メンバの値を読み出します。
+  MEMBER はメンバ名に置き換えます。
+
+MEMBER = val
+
+  構造体メンバの値を書き込みます。
+  MEMBER はメンバ名に置き換えます。
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyVMs.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyVMs.cdl	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyVMs.cdl	(revision 374)
@@ -37,5 +37,6 @@
 
 /*
- * tools/mruby/mruby.c から cInit_initializeBridge( mrb ) を呼び出すように変更したもの
+ * POSIX 環境用の VM
+ * mrbgems の mrbgems/mruby-bin-mruby/tools/mruby/mruby.c を参考に作成したもの
  */
 namespace nMruby{
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyCyclicTaskBody.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyCyclicTaskBody.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyCyclicTaskBody.c	(revision 374)
@@ -0,0 +1,90 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cMrubyVM signature: nMruby_sMrubyVM context:task
+ *   bool_t         cMrubyVM_initialize( );
+ *   bool_t         cMrubyVM_run( );
+ *   void           cMrubyVM_funcall( const char_t* name );
+ *   void           cMrubyVM_finalize( );
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include "nMruby_tMrubyCyclicTaskBody_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eMrubyBody
+ * entry port: eMrubyBody
+ * signature:  sTaskBody
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eMrubyBody_main
+ * name:         eMrubyBody_main
+ * global_name:  nMruby_tMrubyCyclicTaskBody_eMrubyBody_main
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eMrubyBody_main(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( ! VAR_b_init ){
+      cMrubyVM_initialize( );
+      VAR_b_init = true;
+  }
+  cMrubyVM_run( );
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc.c	(revision 374)
@@ -0,0 +1,171 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/*
+ * 以前の nMruby_tMrubyProc.c は、mruby の本体に含まれていた 
+ *    mrbgems/mruby-bin-mruby/tools/mruby/mruby.c
+ * をベースに TECS のコードを足していたが、TOPPERS ライセンスと異なるため
+ * 新たに書き下ろした。（小さなコードのため、概ね似たようなものになるが。
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mruby.h"
+#include "mruby/string.h"
+#include "mruby/array.h"
+#include "mruby/compile.h"
+#include "mruby/dump.h"
+#include "mruby/variable.h"
+
+/* #[<PREAMBLE>]#
+ * Don't edit the comments between #[<...>]# and #[</...>]#
+ * These comment are used by tecsmerege when merging.
+ *
+ * attr access macro #_CAAM_#
+ * mrb              mrb_state*       VAR_mrb         
+ *
+ * call port function #_TCPF_#
+ * call port: cInit signature: nMruby_sInitializeBridge context:task optional:true
+ *   bool_t     is_cInit_joined()                     check if joined
+ *   void           cInit_initializeBridge( const mrb_state* mrb );
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include "nMruby_tMrubyProc_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eMain
+ * entry port: eMain
+ * signature:  nPosix_sMain
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eMain_main
+ * name:         eMain_main
+ * global_name:  nMruby_tMrubyProc_eMain_main
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+int
+eMain_main(CELLIDX idx, int argc, const char** argv)
+{
+	CELLCB	*p_cellcb;
+  mrb_state *mrb;
+  mrbc_context* context;
+  if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+      return -1;
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if (argc != 2) {
+      printf("usage: %s script.rb\n", argv[0]);
+      goto error_return;
+  }
+  mrb = mrb_open();
+  if( mrb == 0 ){
+      printf("%s: mrb_open() failed\n", argv[0]);
+      goto error_return;
+  }
+  context = mrbc_context_new(mrb);
+  if (context == 0) {
+      printf("%s: mrbc_context_new() failed\n", argv[0]);
+      goto error_close;
+  }
+
+  /*--------   ARGV   ----------*/
+  {
+      mrb_value ARGV = mrb_ary_new_capa(mrb, argc);
+      int  i;
+      for (i = 0; i < argc; i++) {
+          mrb_ary_push(mrb, ARGV, mrb_str_new_cstr(mrb, argv[i]));
+      }
+      mrb_define_global_const(mrb, "ARGV", ARGV);
+  }
+  /*--------   $0   ----------*/
+  {
+      mrb_sym zero_sym = mrb_intern_lit(mrb, "$0");
+      mrbc_filename(mrb, context, argv[0]);
+      mrb_gv_set(mrb, zero_sym, mrb_str_new_cstr(mrb, argv[0]));
+  }
+
+  /* ------- register TECS bridge classes -------*/
+  if (is_cInit_joined()) {
+      cInit_initializeBridge(mrb);
+  }
+
+  /*--------  load .rb file -------*/
+  {
+      FILE *file = fopen(argv[1], "r");
+      if (file == NULL) {
+          printf("file not found: %s\n", argv[1]);
+          goto error_free;
+      }
+
+      mrb_value val = mrb_load_file_cxt(mrb, file, context);
+      if (mrb->exc) {
+          if(! mrb_undef_p(val)){
+              mrb_print_error(mrb);
+          }
+      }
+  }
+
+  /*---------- success case --------*/
+  mrbc_context_free(mrb, context);
+  mrb_close( mrb );
+  return 0;
+
+  /*---------- error case ----------*/
+error_free:
+  mrbc_context_free(mrb, context);
+error_close:
+  mrb_close( mrb );
+error_return:
+
+  return -1;
+}
+
+/* #[<POSTAMBLE>]#
+ *   Put non-entry functions below.
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc_1_0.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc_1_0.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc_1_0.c	(revision 374)
@@ -0,0 +1,304 @@
+/*
+ * This file comes from mruby. (renamed from tools/mruby/mruby.c)
+ * This file is distributed under ruby's license. (not under TOPPERS license)
+ *   see https://github.com/mruby/mruby
+ * A little modification is done to to call initializer registering TECS components.
+ *
+ * このファイルは、mruby のものです。
+ * mruby のライセンスのもとで、配布されます。(TOPPERS ライセンスではありません)
+ *  参照：  https://github.com/mruby/mruby
+ * TECS コンポーネントを登録する初期化子を呼ぶため、少しの修正がなされています。
+ */
+
+#include "nMruby_tMrubyProc_tecsgen.h"
+
+#include "mruby.h"
+#include "mruby/proc.h"
+#include "mruby/array.h"
+#include "mruby/string.h"
+#include "mruby/compile.h"
+#include "mruby/dump.h"
+#include "mruby/variable.h"
+#include <stdio.h>
+#include <string.h>
+
+#ifndef ENABLE_STDIO
+static void
+p(mrb_state *mrb, mrb_value obj)
+{
+  obj = mrb_funcall(mrb, obj, "inspect", 0);
+  fwrite(RSTRING_PTR(obj), RSTRING_LEN(obj), 1, stdout);
+  putc('\n', stdout);
+}
+#else
+#define p(mrb,obj) mrb_p(mrb,obj)
+#endif
+
+void mrb_show_version(mrb_state *);
+void mrb_show_copyright(mrb_state *);
+
+struct _args {
+  FILE *rfp;
+  char* cmdline;
+  int fname        : 1;
+  int mrbfile      : 1;
+  int check_syntax : 1;
+  int verbose      : 1;
+  int argc;
+  char** argv;
+};
+
+static void
+usage(const char *name)
+{
+  static const char *const usage_msg[] = {
+  "switches:",
+  "-b           load and execute RiteBinary (mrb) file",
+  "-c           check syntax only",
+  "-e 'command' one line of script",
+  "-v           print version number, then run in verbose mode",
+  "--verbose    run in verbose mode",
+  "--version    print the version",
+  "--copyright  print the copyright",
+  NULL
+  };
+  const char *const *p = usage_msg;
+
+  printf("Usage: %s [switches] programfile\n", name);
+  while(*p)
+  printf("  %s\n", *p++);
+}
+
+static int
+parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
+{
+  char **origargv = argv;
+  static const struct _args args_zero = { 0 };
+
+  *args = args_zero;
+
+  for (argc--,argv++; argc > 0; argc--,argv++) {
+    char *item;
+    if (argv[0][0] != '-') break;
+
+    if (strlen(*argv) <= 1) {
+      argc--; argv++;
+      args->rfp = stdin;
+      break;
+    }
+
+    item = argv[0] + 1;
+    switch (*item++) {
+    case 'b':
+      args->mrbfile = 1;
+      break;
+    case 'c':
+      args->check_syntax = 1;
+      break;
+    case 'e':
+      if (item[0]) {
+        goto append_cmdline;
+      }
+      else if (argc > 1) {
+        argc--; argv++;
+        item = argv[0];
+append_cmdline:
+        if (!args->cmdline) {
+          char *buf;
+
+          buf = (char *)mrb_malloc(mrb, strlen(item)+1);
+          strcpy(buf, item);
+          args->cmdline = buf;
+        }
+        else {
+          args->cmdline = (char *)mrb_realloc(mrb, args->cmdline, strlen(args->cmdline)+strlen(item)+2);
+          strcat(args->cmdline, "\n");
+          strcat(args->cmdline, item);
+        }
+      }
+      else {
+        printf("%s: No code specified for -e\n", *origargv);
+        return 0;
+      }
+      break;
+    case 'v':
+      mrb_show_version(mrb);
+      args->verbose = 1;
+      break;
+    case '-':
+      if (strcmp((*argv) + 2, "version") == 0) {
+        mrb_show_version(mrb);
+        exit(0);
+      }
+      else if (strcmp((*argv) + 2, "verbose") == 0) {
+        args->verbose = 1;
+        break;
+      }
+      else if (strcmp((*argv) + 2, "copyright") == 0) {
+        mrb_show_copyright(mrb);
+        exit(0);
+      }
+      else return -3;
+      return 0;
+    default:
+      return -4;
+    }
+  }
+
+  if (args->rfp == NULL && args->cmdline == NULL) {
+    if (*argv == NULL) args->rfp = stdin;
+    else {
+      args->rfp = fopen(argv[0], args->mrbfile ? "rb" : "r");
+      if (args->rfp == NULL) {
+        printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
+        return 0;
+      }
+      args->fname = 1;
+      args->cmdline = argv[0];
+      argc--; argv++;
+    }
+  }
+  args->argv = (char **)mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
+  memcpy(args->argv, argv, (argc+1) * sizeof(char*));
+  args->argc = argc;
+
+  return 0;
+}
+
+static void
+cleanup(mrb_state *mrb, struct _args *args)
+{
+  if (args->rfp && args->rfp != stdin)
+    fclose(args->rfp);
+  if (args->cmdline && !args->fname)
+    mrb_free(mrb, args->cmdline);
+  if (args->argv)
+    mrb_free(mrb, args->argv);
+  mrb_close(mrb);
+}
+
+static void
+showcallinfo(mrb_state *mrb)
+{
+  mrb_callinfo *ci;
+  mrb_int ciidx;
+  const char *filename, *method, *sep;
+  int i, line;
+
+  printf("trace:\n");
+  ciidx = mrb_fixnum(mrb_obj_iv_get(mrb, mrb->exc, mrb_intern(mrb, "ciidx")));
+  if (ciidx >= mrb->ciend - mrb->cibase)
+    ciidx = 10; /* ciidx is broken... */
+
+  for (i = ciidx; i >= 0; i--) {
+    ci = &mrb->cibase[i];
+    filename = "(unknown)";
+    line = -1;
+
+    if (MRB_PROC_CFUNC_P(ci->proc)) {
+      continue;
+    }
+    else {
+      mrb_irep *irep = ci->proc->body.irep;
+      if (irep->filename != NULL)
+        filename = irep->filename;
+      if (irep->lines != NULL && i+1 <= ciidx) {
+        mrb_code *pc = mrb->cibase[i+1].pc;
+        if (irep->iseq <= pc && pc < irep->iseq + irep->ilen) {
+          line = irep->lines[pc - irep->iseq - 1];
+        }
+      }
+    }
+    if (ci->target_class == ci->proc->target_class)
+      sep = ".";
+    else
+      sep = "#";
+
+    method = mrb_sym2name(mrb, ci->mid);
+    printf("\t[%d] %s:%d%s%s%s%s\n",
+    	   i, filename, line,
+	   method ? ":in " : "",
+	   method ? mrb_class_name(mrb, ci->proc->target_class) : "",
+	   method ? sep : "",
+	   method ? method : "");
+  }
+}
+
+int
+eMain_main( CELLIDX idx, int argc, const char **argv)
+{
+  CELLCB   *p_cellcb = GET_CELLCB( idx );
+  mrb_state *mrb = mrb_open();
+  int n = -1;
+  int i;
+  struct _args args;
+  mrb_value ARGV;
+
+  cInit_initializeBridge( mrb );
+
+  if (mrb == NULL) {
+    fprintf(stderr, "Invalid mrb_state, exiting mruby\n");
+    return EXIT_FAILURE;
+  }
+
+  n = parse_args(mrb, argc, (char **)argv, &args);
+  if (n < 0 || (args.cmdline == NULL && args.rfp == NULL)) {
+    cleanup(mrb, &args);
+    usage(argv[0]);
+    return n;
+  }
+
+  ARGV = mrb_ary_new_capa(mrb, args.argc);
+  for (i = 0; i < args.argc; i++) {
+    mrb_ary_push(mrb, ARGV, mrb_str_new(mrb, args.argv[i], strlen(args.argv[i])));
+  }
+  mrb_define_global_const(mrb, "ARGV", ARGV);
+
+  if (args.mrbfile) {
+    n = mrb_load_irep(mrb, args.rfp);
+    if (n < 0) {
+      fprintf(stderr, "failed to load mrb file: %s\n", args.cmdline);
+    }
+    else if (!args.check_syntax) {
+      mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
+      n = 0;
+      if (mrb->exc) {
+        showcallinfo(mrb);
+        p(mrb, mrb_obj_value(mrb->exc));
+        n = -1;
+      }
+    }
+  }
+  else {
+    mrbc_context *c = mrbc_context_new(mrb);
+    mrb_value v;
+
+    if (args.verbose)
+      c->dump_result = 1;
+    if (args.check_syntax)
+      c->no_exec = 1;
+
+    if (args.rfp) {
+      mrbc_filename(mrb, c, args.cmdline ? args.cmdline : "-");
+      v = mrb_load_file_cxt(mrb, args.rfp, c);
+    }
+    else {
+      mrbc_filename(mrb, c, "-e");
+      v = mrb_load_string_cxt(mrb, args.cmdline, c);
+    }
+    mrbc_context_free(mrb, c);
+    if (mrb->exc) {
+      if (!mrb_undef_p(v)) {
+        showcallinfo(mrb);
+        p(mrb, mrb_obj_value(mrb->exc));
+      }
+      n = -1;
+    }
+    else if (args.check_syntax) {
+      printf("Syntax OK\n");
+    }
+  }
+  cleanup(mrb, &args);
+
+  return n == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyTaskBody.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyTaskBody.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyTaskBody.c	(revision 374)
@@ -0,0 +1,88 @@
+/*
+ *   Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cMrubyVM signature: nMruby_sMrubyVM context:task
+ *   bool_t         cMrubyVM_initialize( );
+ *   bool_t         cMrubyVM_run( );
+ *   void           cMrubyVM_finalize( );
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include "nMruby_tMrubyTaskBody_tecsgen.h"
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eMrubyBody
+ * entry port: eMrubyBody
+ * signature:  sTaskBody
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eMrubyBody_main
+ * name:         eMrubyBody_main
+ * global_name:  nMruby_tMrubyTaskBody_eMrubyBody_main
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eMrubyBody_main(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( cMrubyVM_initialize( ) ){
+    cMrubyVM_run( );
+    cMrubyVM_finalize( );
+  }
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyVM.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyVM.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyVM.c	(revision 374)
@@ -0,0 +1,236 @@
+/*
+ *  Copyright (C) 2008-2017 by TOPPERS Project
+ *
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
+ * irep             uint8_t*         ATTR_irep       
+ * var_irep         mrb_irep*        VAR_var_irep    
+ * mrb              mrb_state*       VAR_mrb         
+ * rproc            struct RProc*    VAR_rproc       
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cInit signature: nMruby_sInitializeBridge context:task optional:true
+ *   bool_t     is_cInit_joined()                     check if joined
+ *   void           cInit_initializeBridge( const mrb_state* mrb );
+ * call port: cMalloc signature: sMalloc context:task
+ *   int            cMalloc_initializeMemoryPool( );
+ *   void*          cMalloc_calloc( size_t nelem, size_t elem_size );
+ *   void*          cMalloc_malloc( size_t size );
+ *   void*          cMalloc_realloc( const void* ptr, size_t new_size );
+ *   void           cMalloc_free( const void* ptr );
+ *
+ * #[</PREAMBLE>]# */
+
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
+#include "nMruby_tMrubyVM_tecsgen.h"
+#include <string.h>
+
+#include <mruby.h>
+#include <mruby/proc.h>
+#include <mruby/data.h>
+#include <mruby/compile.h>
+#include "t_syslog.h"
+
+MRB_API mrb_state* mrb_open_TECS( CELLCB *p_cellcb);
+
+#ifndef E_OK
+#define	E_OK	0		/* success */
+#define	E_ID	(-18)	/* illegal ID */
+#endif
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eMrubyVM
+ * entry port: eMrubyVM
+ * signature:  nMruby_sMrubyVM
+ * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eMrubyVM_initialize
+ * name:         eMrubyVM_initialize
+ * global_name:  nMruby_tMrubyVM_eMrubyVM_initialize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+bool_t
+eMrubyVM_initialize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+    return false;
+	} /* end if VALID_IDX(idx) */
+
+  cMalloc_initializeMemoryPool();
+	/* ここに処理本体を記述します #_TEFB_# */
+  /* new interpreter instance */
+  //VAR_mrb = mrb_open();
+  VAR_mrb = mrb_open_TECS(p_cellcb);
+  if (VAR_mrb == NULL) {
+    syslog(LOG_EMERG, "Invalid mrb_state, exiting test driver");
+//    cSerialPort_write("Invalid mrb_state, exiting test driver\n", 39);
+    return false;
+  }
+
+  if(is_cInit_joined()){
+    // TECS Bridge
+    cInit_initializeBridge( VAR_mrb );
+  }
+  VAR_var_irep = mrb_read_irep(VAR_mrb, ATTR_irep);
+  VAR_rproc = mrb_proc_new(VAR_mrb, VAR_var_irep);
+  return true;
+}
+
+/* #[<ENTRY_FUNC>]# eMrubyVM_run
+ * name:         eMrubyVM_run
+ * global_name:  nMruby_tMrubyVM_eMrubyVM_run
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+bool_t
+eMrubyVM_run(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  mrb_run(VAR_mrb, VAR_rproc, mrb_top_self(VAR_mrb));
+  if (VAR_mrb->exc) {
+    mrb_p(VAR_mrb, mrb_obj_value(VAR_mrb->exc));
+    return false;
+  }
+  return true;
+}
+
+/* #[<ENTRY_FUNC>]# eMrubyVM_funcall
+ * name:         eMrubyVM_funcall
+ * global_name:  nMruby_tMrubyVM_eMrubyVM_funcall
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eMrubyVM_funcall(CELLIDX idx, const char_t* name)
+{
+	CELLCB	*p_cellcb;
+  mrb_int  argc;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  argc = 0;
+  (void)mrb_funcall(VAR_mrb, mrb_top_self(VAR_mrb), name, argc );
+}
+
+/* #[<ENTRY_FUNC>]# eMrubyVM_finalize
+ * name:         eMrubyVM_finalize
+ * global_name:  nMruby_tMrubyVM_eMrubyVM_finalize
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+void
+eMrubyVM_finalize(CELLIDX idx)
+{
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	syslog(LOG_EMERG, "end of mruby program");
+  mrb_close(VAR_mrb);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
+
+#include "tlsf.h"
+void*
+mrb_TECS_allocf(mrb_state *mrb, void *p, size_t size, void *ud)
+{
+	CELLCB	*p_cellcb= (CELLCB *)ud;
+  if (size == 0) {
+      cMalloc_free(p);
+      //tlsf_free(p);
+      return NULL;
+  }
+  else if (p){
+      //return tlsf_realloc(p,size);
+      return cMalloc_realloc(p, size);
+  }
+  else {
+      //return tlsf_malloc(size);
+      return cMalloc_malloc(size);
+  }
+}
+
+// p_cellcb は VM のもの
+// VM セルタイプに、呼び口 call sMalloc cMalloc; を設ける
+// mrb_TECS_allocf を参照
+MRB_API mrb_state*
+mrb_open_TECS( CELLCB *p_cellcb)
+{
+    return mrb_open_allocf(mrb_TECS_allocf, (void *)p_cellcb);
+};
+
+/*** ダミー関数 ***/
+#ifndef EV3_SOUND
+void _write(){}
+void _close(){}
+void _lseek(){}
+void _read(){}
+//void _fstat(){}
+//void _isatty(){}
+#endif
+
+//void _exit(){}
+//void _getpid(){}
+//void _kill(){}
+void _gettimeofday(){}
+void _fini(){}
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/sMruby.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/sMruby.cdl	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/sMruby.cdl	(revision 374)
@@ -0,0 +1,67 @@
+/*
+ *  Copyright (C) 2012 by Ubiquitous Computing and Networking Laboratory
+ *                Ritsumeikan Univ., JAPAN
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+namespace nMruby{
+  signature sMrubyVM {
+    /*
+     * 初期化する (以下まで完了する)
+     *   mrb_open
+     *   VM_TECSInitializer  (TECS ブリッジの初期化)
+     *   mrb_read_irep       (バイトコードの登録)
+     */
+    bool_t initialize(void);
+
+    /*
+     * 実行する
+     * RETURN
+     *   true  未処置の例外がない
+     *   false 未処置の例外がある
+     *  initialize が false を返した場合、run, finalize を呼び出してはならない
+     */
+    bool_t run(void);
+
+    /*
+     * 関数を呼びだす
+     */
+    void funcall( [in,string]const char_t *name );
+
+    /*
+     * 終期化する
+     *  run が false を返した場合でも呼びだすこと
+     */
+    void finalize(void);
+
+  };
+};
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/tecs_mruby.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/tecs_mruby.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/mruby/tecs_mruby.h	(revision 374)
@@ -1,4 +1,4 @@
 /*
- *  Copyright (C) 2008-2017 by TOPPERS Project
+ *  Copyright (C) 2008-2019 by TOPPERS Project
  *
  *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -46,30 +46,14 @@
 #include "mruby/irep.h"
 #include "mruby/dump.h"
+#include "mruby/proc.h"
 
 #include "TECSPointer.h"
 #include "TECSStruct.h"
 
-#if  ! defined( MRUBY_RELEASE_MAJOR ) || MRUBY_RELEASE_MAJOR == 1 && MRUBY_RELEASE_MINOR < 2
-#ifndef MRB_ARGS_REQ
-#define MRB_ARGS_REQ(n)     ARGS_REQ(n)
-#define MRB_ARGS_OPT(n)     ARGS_OPT(n)
-#define MRB_ARGS_ARG(n1,n2) ARGS_ARG(n1,n2)
-#define MRB_ARGS_REST()     ARGS_REST()
-#define MRB_ARGS_POST(n)    ARGS_POST(n)
-#define MRB_ARGS_KEY(n1,n2) ARGS_KEY(n1,n2)
-#define MRB_ARGS_BLOCK()    ARGS_BLOCK()
-#define MRB_ARGS_ANY()      ARGS_ANY()
-#define MRB_ARGS_NONE()     ARGS_NONE()
-#endif /* MRB_ARGS_REQ */
-#endif
 
-#if  ! defined( MRUBY_RELEASE_MAJOR )
-#define mrb_float_value( mrb, val )  mrb_float_value( val )
-#endif
-
-#else
+#else /* TECSGEN */
 
 /*
- * fake tecsgen because tecsgen cannot accept actual mruby.h in case of below.
+ * fake definition because tecsgen cannot accept actual mruby.h in case of below.
  *   types:   long long, long long int
  *   special keyword __attribute__(x), __extension__
@@ -78,8 +62,15 @@
 typedef int mrb_irep;
 typedef int mrb_context;
-struct  RClass {int dummy;};
-struct  RProc  {int dummy;};
+struct  RClass {uint32_t gcnext;};  // actual definition: struct RBasic *gcnext
+struct  RProc  {uint32_t gcnext;};  // actual definition: struct RBasic *gcnext
 
 typedef int CELLCB;
+
+#define GET_SET_BOOL( Type, type )
+#define GET_SET_CHAR( Type, type )
+#define GET_SET_INT( Type, type )
+#define GET_SET_FLOAT( Type, type )
+#define POINTER_CLASS( Type, type )
+#define CHECK_AND_GET_POINTER( Type, type )
 
 #endif /* TECSGEN */
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/TDR.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/TDR.cdl	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/TDR.cdl	(revision 374)
@@ -68,9 +68,4 @@
 	ER	sendSOP( [in]bool_t b_client );     /* StartOfPacket magic を送信 */
 	ER	receiveSOP( [in]bool_t b_client );  /* StartOfPacket magic を受信 */
-						 /* b_client: クライアント側なら true, サーバー側なら false */
-
-	/* マジックコードの送受信 */
-	//	ER	sendSHSOP( [in]bool_t b_client );     /* StartOfPacket magic を送信 */
-	//	ER	receiveSHSOP( [in]bool_t b_client );  /* StartOfPacket magic を受信 */
 						 /* b_client: クライアント側なら true, サーバー側なら false */
 
@@ -150,5 +145,5 @@
 };
 
-// Straight Order TECS Data Representation (Straight means no endian-conversion is done)
+// Straight Byte Order TECS Data Representation (Data are always sent in native endian)
 celltype tTDR {
 	call	sChannel	cChannel;
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/sChannel.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/sChannel.cdl	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/sChannel.cdl	(revision 374)
@@ -58,2 +58,10 @@
 };
 
+/*
+ * 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 のような基本型(無符号を含む)が渡される。
+ * 配列や構造体の場合であっても要素ごとに渡される。
+ */
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP.cdl	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP.cdl	(revision 374)
@@ -0,0 +1,67 @@
+/*
+ *  TECS Generator
+ *      Generator for TOPPERS Embedded Component System
+ *  
+ *   Copyright (C) 2008-2013 by TOPPERS Project
+ *--
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
+ *  
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
+ *  
+ *   $Id$
+ */
+
+const uint16_t DEFAULT_MESSAGE_BUFFER_SIZE = 64;
+
+celltype tMessageBufferCEP {
+    [inline]
+        entry sChannel eChannel;
+    call  sMessageBuffer cMessageBuffer0;   /* Client(send) --> Server(receive) */
+    call  sMessageBuffer cMessageBuffer1;   /* Server(send) --> Client(receive) */
+
+    attr {
+        uint16_t  buf_size = DEFAULT_MESSAGE_BUFFER_SIZE;
+        /* この値は maxMessageSize に合わせる。小さいと、バッファオーバーランになる */
+    };
+    var {
+        /*
+         * OpaqueMarshalerPlugin の生成するマーシャラは、受信したいサイズ以上の領域を確保しない．
+         * 一方、tMessageBuffer は、最大 maxMessageSize 読み出しうる．
+         * 受信する側は、必ず maxMessageSize を用意しておく必要がある．
+         * このため、いったんバッファへ受け取ってコピーする必要がある．
+         */
+        [size_is(buf_size)]
+            int8_t *read_buf;
+        uint16_t   read_count;
+        uint16_t   n_read_buf_filled;
+
+        [size_is(buf_size)]
+            int8_t *write_buf;
+        uint16_t   write_count;
+    };
+};
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP_inline.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP_inline.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP_inline.h	(revision 374)
@@ -0,0 +1,203 @@
+#ifndef tMessageBufferCEP__INLINE_H
+#define tMessageBufferCEP__INLINE_H
+
+/* #[<PREAMBLE>]#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 呼び口関数 #_TCPF_#
+ * call port: cMessageBuffer0 signature: sMessageBuffer context:task
+ *   ER             cMessageBuffer0_send( const uint8_t* message, uint32_t size );
+ *   ER             cMessageBuffer0_sendPolling( const uint8_t* message, uint32_t size );
+ *   ER             cMessageBuffer0_sendTimeout( const uint8_t* message, uint32_t size, TMO timeout );
+ *   ER_UINT        cMessageBuffer0_receive( uint8_t* message );
+ *   ER_UINT        cMessageBuffer0_receivePolling( uint8_t* message );
+ *   ER_UINT        cMessageBuffer0_receiveTimeout( uint8_t* message, TMO timeout );
+ *   ER             cMessageBuffer0_initialize( );
+ *   ER             cMessageBuffer0_refer( T_RMBF* pk_messageBufferStatus );
+ * call port: cMessageBuffer1 signature: sMessageBuffer context:task
+ *   ER             cMessageBuffer1_send( const uint8_t* message, uint32_t size );
+ *   ER             cMessageBuffer1_sendPolling( const uint8_t* message, uint32_t size );
+ *   ER             cMessageBuffer1_sendTimeout( const uint8_t* message, uint32_t size, TMO timeout );
+ *   ER_UINT        cMessageBuffer1_receive( uint8_t* message );
+ *   ER_UINT        cMessageBuffer1_receivePolling( uint8_t* message );
+ *   ER_UINT        cMessageBuffer1_receiveTimeout( uint8_t* message, TMO timeout );
+ *   ER             cMessageBuffer1_initialize( );
+ *   ER             cMessageBuffer1_refer( T_RMBF* pk_messageBufferStatus );
+ *
+ * #[</PREAMBLE>]# */
+
+/* 受け口関数 #_TEPF_# */
+/* #[<ENTRY_PORT>]# eChannel
+ * entry port: eChannel
+ * signature:  sChannel
+2 * context:    task
+ * #[</ENTRY_PORT>]# */
+
+/* #[<ENTRY_FUNC>]# eChannel_send
+ * name:         eChannel_send
+ * global_name:  tMessageBufferCEP_eChannel_send
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER
+eChannel_send(CELLIDX idx, const int8_t* buf, int16_t size, TMO tmo)
+{
+	ER		ercd = E_OK;
+  int16_t write_count;
+    CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( size < 0 )
+      return E_PAR;
+  else if( size == 0 )
+      return E_OK;
+
+  write_count = 0;
+  while( write_count < size ){
+      VAR_write_buf[ VAR_write_count++ ] = buf[ write_count++ ];
+      if( VAR_write_count >= ATTR_buf_size ){
+          ercd = eChannel_flush( idx, tmo);
+          if( ercd != E_OK ){
+              break;
+          }
+      }
+  }
+
+  // syslog( LOG_INFO, "eChannel_send ercd=%d", ercd );
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eChannel_flush
+ * name:         eChannel_flush
+ * global_name:  tMessageBufferCEP_eChannel_flush
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER
+eChannel_flush(CELLIDX idx, TMO tmo)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  /* flush しなくても、いつも送られる */
+  if( VAR_write_count > 0 ){
+      ercd = cMessageBuffer0_sendTimeout( (const uint8_t *)VAR_write_buf, VAR_write_count, tmo );
+  }
+  // syslog( LOG_INFO, "eChannel_flush ercd=%d count=%d", ercd, VAR_write_count );
+  VAR_write_count = 0;
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eChannel_receive
+ * name:         eChannel_receive
+ * global_name:  tMessageBufferCEP_eChannel_receive
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER_UINT
+eChannel_receive(CELLIDX idx, int8_t* buf, int16_t size, TMO tmo)
+{
+	ER		   ercd = E_OK;
+	CELLCB	 *p_cellcb;
+  int16_t  count = 0;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  if( size == 0 )
+      return 0;
+
+  while( count < size ){
+      if( VAR_n_read_buf_filled == 0 ){
+          ercd = cMessageBuffer1_receiveTimeout( (uint8_t *)VAR_read_buf, tmo );
+          if( ercd < 0  )
+              break;
+          VAR_n_read_buf_filled = ercd;
+      }
+      while( count < size && VAR_read_count < VAR_n_read_buf_filled ){
+          buf[ count ] = VAR_read_buf[ VAR_read_count ];
+          count++;
+          VAR_read_count++;
+      }
+      if( VAR_read_count >= VAR_n_read_buf_filled ){
+          VAR_n_read_buf_filled = 0;
+          VAR_read_count = 0;
+      }
+      ercd = count;
+  }
+  // syslog( LOG_INFO, "eChannel_receive ercd=%d", ercd );
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eChannel_end_receive
+ * name:         eChannel_end_receive
+ * global_name:  tMessageBufferCEP_eChannel_end_receive
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER
+eChannel_end_receive(CELLIDX idx)
+{
+	ER		ercd = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
+
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
+/* #[<ENTRY_FUNC>]# eChannel_reset
+ * name:         eChannel_reset
+ * global_name:  tMessageBufferCEP_eChannel_reset
+ * oneway:       false
+ * #[</ENTRY_FUNC>]# */
+Inline ER
+eChannel_reset(CELLIDX idx)
+{
+  ER		ercd0 = E_OK, ercd1 = E_OK;
+	CELLCB	*p_cellcb;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
+
+	/* ここに処理本体を記述します #_TEFB_# */
+  ercd0 = cMessageBuffer0_initialize( );
+  ercd1 = cMessageBuffer1_initialize( );
+
+	return(ercd1 != E_OK ? ercd1 : ercd0);
+}
+
+/* #[<POSTAMBLE>]#
+ *   これより下に非受け口関数を書きます
+ * #[</POSTAMBLE>]#*/
+
+#endif /* tMessageBufferCEP_INLINEH */
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferChannel.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferChannel.cdl	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferChannel.cdl	(revision 374)
@@ -0,0 +1,73 @@
+/*
+ *  TECS Generator
+ *      Generator for TOPPERS Embedded Component System
+ *  
+ *   Copyright (C) 2014 by Embedded and Real-Time Systems Laboratory
+ *               Graduate School of Information Science, Nagoya Univ., JAPAN
+ *--
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
+ *  
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
+ *  
+ *   $Id$
+ */
+
+composite tMessagebufferChannel {
+    //entry sTDR       eTDR;
+    entry sEventflag eEventflag;
+    entry sSemaphore eSemaphore;
+    entry sMessageBuffer eMessageBuffer;
+
+    attr {
+        // Queue のデフォルトのサイズ
+        uint32_t	bufferSize = 256;
+    };
+
+    cell  tMessageBuffer Messagebuffer{
+        maxMessageSize = 128;
+        bufferSize = composite.bufferSize;
+    };
+    cell  tEventflag Eventflag{
+        flagPattern = 0;
+    };
+    cell tSemaphore Semaphore{
+        attribute = C_EXP("TA_NULL");
+        initialCount = 0;
+    };
+
+    //cell  tTDR TDR {
+    //	cChannel = MessagebufferAdaptor.eChannel;
+    //};
+
+    //composite.eTDR       => TDR.eTDR;
+    composite.eEventflag => Eventflag.eEventflag;
+    composite.eSemaphore => Semaphore.eSemaphore;
+    composite.eMessageBuffer => Messagebuffer.eMessageBuffer;
+
+};
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tTDR_inline.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tTDR_inline.h	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tTDR_inline.h	(revision 374)
@@ -75,4 +75,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	syslog( LOG_INFO, "TDR: resetting channel" );
@@ -102,4 +103,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -151,4 +153,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -157,5 +160,5 @@
 #endif
 
-    if( b_client )
+  if( b_client )
 		p_sopMagic = &SOP_MAGIC2;
 	else
@@ -198,4 +201,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -234,4 +238,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -267,4 +272,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -287,4 +293,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -307,4 +314,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -327,4 +335,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -347,4 +356,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -368,4 +378,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -390,4 +401,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -412,4 +424,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -434,4 +447,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -456,4 +470,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -477,4 +492,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -497,4 +513,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -517,4 +534,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -537,4 +555,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -557,4 +576,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -578,4 +598,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -600,4 +621,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -622,4 +644,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -644,4 +667,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -666,4 +690,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -688,4 +713,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -705,11 +731,12 @@
 	ER		ercd = E_OK;
 	CELLCB	*p_cellcb;
-	uint8_t	val;
-	if (VALID_IDX(idx)) {
-		p_cellcb = GET_CELLCB(idx);
-	}
-	else {
-		return(E_ID);
-	} /* end if VALID_IDX(idx) */
+	uint8_t	val = 0;
+	if (VALID_IDX(idx)) {
+		p_cellcb = GET_CELLCB(idx);
+	}
+	else {
+		return(E_ID);
+	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -737,4 +764,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -757,4 +785,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -778,4 +807,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -800,4 +830,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -821,4 +852,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -863,4 +895,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -883,4 +916,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -903,4 +937,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -923,4 +958,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -944,4 +980,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -966,4 +1003,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -988,4 +1026,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -1010,4 +1049,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -1031,4 +1071,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -1051,4 +1092,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -1071,4 +1113,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -1091,4 +1134,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -1112,4 +1156,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -1134,4 +1179,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -1156,4 +1202,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -1178,4 +1225,5 @@
 		return(E_ID);
 	} /* end if VALID_IDX(idx) */
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -1199,4 +1247,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
@@ -1220,4 +1269,5 @@
 		return(E_ID);
 	}
+  (void)p_cellcb;   // to avoid unused warning
 
 	/* ここに処理本体を記述します #_TEFB_# */
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/sMalloc.cdl
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/sMalloc.cdl	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/sMalloc.cdl	(revision 374)
@@ -0,0 +1,46 @@
+/*
+ *  Copyright (C) 2012 by Ubiquitous Computing and Networking Laboratory
+ *                Ritsumeikan Univ., JAPAN
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+
+import_C( "t_stddef.h" );
+
+[deviate]
+signature sMalloc {
+    int    initializeMemoryPool(void);
+    void   *calloc( [in]size_t nelem, [in]size_t elem_size );
+    void   *malloc( [in]size_t size );
+    void   *realloc( [in]const void *ptr, [in]size_t new_size );
+    void   free( [in]const void *ptr );
+};
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecsgen.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecsgen.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecsgen.rb	(revision 374)
@@ -5,5 +5,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2017 by TOPPERS Project
+#   Copyright (C) 2008-2019 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -54,5 +54,5 @@
 #  Authors list is in i-ro-ha order.
 #Version::   see version.rb
-$Copyright = "Copyright(c) 2008-2017, TOPPERS project. All rights reserved."
+$Copyright = "Copyright(c) 2008-2019, TOPPERS project. All rights reserved."
 $License   = "TOPPERS License"
 
@@ -223,5 +223,7 @@
     analyze_option addtional_option_parser
     load_modules
-    setup
+    if ! $TECSFLOW then
+      setup
+    end
         
     dbgPrint  "tecspath: #{$tecsgen_base_path}, __FILE__=#{__FILE__}\n"
@@ -284,5 +286,6 @@
     ARGV.each { |a| $arguments += " " + a }
 
-    $unopt     = false     # bool:   disable optimizing
+    $unopt     = false     # bool:   disable optimizing both call and entry port
+    $unopt_entry= false    # bool:   disable optimizing entry port
     $gen_base  = "gen"     # string: folder path to place generated files
     $gen       = $gen_base # string: folder path to place generated files
@@ -385,4 +388,7 @@
         $unopt = true
       }
+      parser.on('--unoptimize-entry', 'unoptimize entry port') {
+        $unopt_entry = true
+      }
       parser.on('-c', '--cpp=cpp_cmd', 'C pre-processor command used import_C (default: gcc -E -DTECSGEN), you can also specify by environment variable TECS_CPP' ){
         |arg|
@@ -465,5 +471,5 @@
     }
 
-    if ARGV.empty? && ! $print_version && ! $unit_test
+    if ARGV.empty? && ! $print_version && ! $unit_test && ! $TECSFLOW
       ARGV.options{|parser|
         puts parser.help
@@ -482,6 +488,6 @@
     # このファイルを誤って読み込むと、異なるバージョン名を表示してしまう
     require_tecsgen_lib 'tecslib/version.rb'
-    if $tecscde_version then
-      STDERR << "tecscde version #{$tecscde_version} (tecsgen version #{$version})  #{$Copyright}\n"
+    if $title then
+      STDERR << "#{$title} version #{$tool_version} (tecsgen version #{$version})  #{$Copyright}\n"
     elsif ! $no_banner || $print_version
       STDERR << "tecsgen  version #{$version}  #{$Copyright}\n"
@@ -490,5 +496,5 @@
       STDERR << "ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} patchlevel #{RUBY_PATCHLEVEL}) [#{RUBY_PLATFORM}]\n"
     end
-    if $print_version && ARGV.empty?
+    if $print_version && ARGV.empty? && ! $TECSFLOW
       exit
     end
@@ -518,4 +524,5 @@
     require_tecsgen_lib 'tecslib/core/tool_info.rb'
     require_tecsgen_lib 'tecslib/core/tecsinfo.rb'
+    require_tecsgen_lib 'tecslib/core/unjoin_plugin.rb'
     require_tecsgen_lib 'tecslib/plugin/CelltypePlugin.rb'
     require_tecsgen_lib 'tecslib/plugin/CompositePlugin.rb'
@@ -601,5 +608,5 @@
 #  クラス変数のリセットを確実に行う必要がある
 
-if $TECSCDE != true then
+if $TECSCDE != true && $TECSFLOW != true then
   begin
     TECSGEN.init
@@ -607,4 +614,5 @@
     tecsgen.run1
     tecsgen.run2
+    tecsgen.dump_tecsgen_rbdmp
   rescue => evar
     print_exception( evar )
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecsgen_rcov.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecsgen_rcov.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecsgen_rcov.rb	(revision 374)
@@ -44,6 +44,9 @@
 # Usage: tecsgen_rcov.rb [options] CDL-file.cdl
 #
+
+$:.unshift(File.dirname(__FILE__))
+
 require 'simplecov'
-SimpleCov.command_name "tecsgen#{$$}"
+SimpleCov.command_name "tecsgen#{Time.now.to_f}"
 SimpleCov.root File.dirname( File.expand_path __FILE__ )
 SimpleCov.at_exit do
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.tab.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.tab.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.tab.rb	(revision 374)
@@ -1,5 +1,5 @@
 #
 # DO NOT MODIFY!!!!
-# This file is automatically generated by Racc 1.4.14
+# This file is automatically generated by Racc 1.4.9
 # from Racc grammer file "".
 #
@@ -8,293 +8,300 @@
 class C_parser < Racc::Parser
 
-module_eval(<<'...end C_parser.y.rb/module_eval...', 'C_parser.y.rb', 727)
-
-  RESERVED = {
-    # keyword
-    'typedef' => :TYPEDEF,
-    'struct' => :STRUCT,
-    'union' => :UNION,
-    'sizeof' => :SIZEOF,
-    'throw' => :THROW,
-
-    # specifier
-    # types
-    'void'    => :VOID,
-    'char'    => :CHAR,
-    'short'   => :SHORT,
-
-    'volatile'=> :VOLATILE,
-    'const'   => :CONST,
-    'extern'   => :EXTERN,
-
-    'long'    => :LONG,
-    'float'   => :FLOAT,
-    'double'  => :DOUBLE,
-    'signed'  => :SIGNED,
-    'unsigned'=> :UNSIGNED,
-
-    'int'     => :INT,
-    'enum'    => :ENUM,
-
-    'if'      => :IF,
-    'else'    => :ELSE,
-    'while'   => :WHILE,
-    'do'      => :DO,
-    'for'     => :FOR,
-    'case'    => :CASE,
-    'default' => :DEFAULT,
-    'goto'    => :GOTO,
-    'continue' => :CONTINUE,
-    'break'   => :BREAK,
-    'return'  => :RETURN,
-    '__inline__'  => :__INLINE__,
-    'inline'  => :INLINE,
-    '__inline'  => :__INLINE,
-    'Inline'  => :CINLINE,        # inline starting with Capital letter
-    'static'  => :STATIC,
-    'register' => :REGISTER,
-    'auto'    => :AUTO,
-    '__extension__'    => :EXTENSION,
-
-  }
-
-  @@generator_nest = -1
-  @@generator_stack = []
-  @@current_locale = []
-
-  def finalize
-
-    # mikan Namespace.pop
-    Celltype.pop
-    Cell.pop
-    CompositeCelltype.pop
-    Region.pop
-
-  end
-
-  def set_plugin( plugin )
-    @plugin = plugin
-  end
-
-  def self.get_plugin
-    @@generator_stack[@@generator_nest].get_plugin
-  end
-
-  def get_plugin
-    @plugin
-  end
-
-  def parse(files)
-
-    # mikan Namespace.push
-    Celltype.push
-    Cell.push
-    CompositeCelltype.push
-    Region.push
-
-    @@generator_nest += 1
-    @@generator_stack[@@generator_nest] = self
-    @b_no_type_name = false
-
-   begin
-
-    @q = []
-    comment = false
-
-    # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
-    TECS_LANG::set_kcode_binary
-
-    # 800U, 0xffLL など (整数リテラルに共通の修飾子)
-    integer_qualifier = "([Uu][Ll][Ll]|[Uu][Ll]|[Uu]|[Ll][Ll]|[Ll])?"
-
-    files.each {|file|
-      lineno = 1
-     begin
-#2.0       IO.foreach(file) {|line|
-       TECSIO.foreach(file) {|line|
-        col = 1
-        line.rstrip!
-
-        until line.empty?
-
-          if comment
-            case line
-            # コメント終了
-            when /\A\*\//
-              comment = false
-            when /\A./
-              ;
-            end
-          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 進数定数
-            when /\A0x[0-9A-Fa-f]+#{integer_qualifier}/
-              @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
-            # 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\"       最後の " 忘れ)で無限ループ
-#            when /\A"(?:[^"\\]+|\\.)*"/
-            when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
-              @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
-            # 行コメント
-            when /\A\/\/.*$/
-              # 読み飛ばすだけ
-            # コメント開始
-            when /\A\/\*/
-              comment = true
-            when /\A>>=/, /\A<<=/, /\A>>/,  /\A<</
-              @q << [$&, Token.new($&, file, lineno, col)]
-            when /\A\+=/, /\A\-=/, /\A\*=/, /\A\/=/, /\A%=/, /\A&=/, /\A\|=/, /\A\^=/
-              @q << [$&, Token.new($&, file, lineno, col)]
-            when /\A::/, /\A==/, /\A!=/, /\A>=/, /\A<=/, /\A\->/, /\A\+\+/, /\A\-\-/
-              @q << [$&, Token.new($&, file, lineno, col)]
-            when /\A./
-              @q << [$&, Token.new($&, file, lineno, col)]
-            else
-              raise
-            end
-          end
-
-          line = $'
-          col += $&.length
-        end
-
-        lineno += 1
-      }
-
-     rescue => evar
-       Generator.error( "B1002 while open or reading \'$1\'" , file )
-       print_exception( evar )
-     end
-    }
-
-    # 終了の印
-    @q << nil
-
-    @yydebug = true
-    do_parse
-
-   ensure
-    @@generator_nest -= 1
-    TECS_LANG::reset_kcode
-   end
-
-  end
-
-
-  def next_token
-    token = @q.shift
-
-    if token then
-      @@current_locale[@@generator_nest] = token[1].locale
-
-      case token[1].val
-      when ";", ":", ",", "(", ")", "{", "}"
-        set_no_type_name false
-      when ".", "->"
-        set_no_type_name true
-      end
-
-      # TYPE_NAME トークンへ置き換え
-      if @b_no_type_name == false
-        if token[0] == :IDENTIFIER && Namespace.is_typename?( token[1].val ) then
-          token[0] = :TYPE_NAME
-          locale = @@current_locale[@@generator_nest]
+module_eval(<<'...end C_parser.y.rb/module_eval...', 'C_parser.y.rb', 784)
+
+	RESERVED = {
+		# keyword
+		'typedef' => :TYPEDEF,
+		'struct' => :STRUCT,
+		'union' => :UNION,
+		'sizeof' => :SIZEOF,
+		'throw' => :THROW,
+
+		# specifier
+		# types
+		'void'    => :VOID,
+		'char'    => :CHAR,
+		'short'   => :SHORT,
+
+		'volatile'=> :VOLATILE,
+		'restrict'=> :RESTRICT,
+		'const'   => :CONST,
+		'extern'   => :EXTERN,
+
+		'long'    => :LONG,
+		'float'   => :FLOAT,
+		'double'  => :DOUBLE,
+		'signed'  => :SIGNED,
+		'unsigned'=> :UNSIGNED,
+
+		'int'     => :INT,
+		'enum'    => :ENUM,
+
+		'if'      => :IF,
+		'else'    => :ELSE,
+		'while'   => :WHILE,
+		'do'      => :DO,
+		'for'     => :FOR,
+		'switch'  => :SWITCH,
+		'case'    => :CASE,
+		'default' => :DEFAULT,
+		'goto'    => :GOTO,
+		'continue' => :CONTINUE,
+		'break'   => :BREAK,
+		'return'  => :RETURN,
+		'__inline__'  => :__INLINE__,
+		'inline'  => :INLINE,
+		'__inline'  => :__INLINE,
+		'Inline'  => :CINLINE,        # inline starting with Capital letter
+		'static'  => :STATIC,
+		'register' => :REGISTER,
+		'auto'    => :AUTO,
+		'__extension__'    => :EXTENSION,
+		'__asm__' => :_ASM,
+		'asm' =>     :_ASM
+
+	}
+
+	@@generator_nest = -1
+	@@generator_stack = []
+	@@current_locale = []
+
+	def finalize
+
+		# mikan Namespace.pop
+		Celltype.pop
+		Cell.pop
+		CompositeCelltype.pop
+		Region.pop
+
+	end
+
+	def set_plugin( plugin )
+		@plugin = plugin
+	end
+
+	def self.get_plugin
+		@@generator_stack[@@generator_nest].get_plugin
+	end
+
+	def get_plugin
+		@plugin
+	end
+
+	def parse(files)
+
+		# mikan Namespace.push
+		Celltype.push
+		Cell.push
+		CompositeCelltype.push
+		Region.push
+
+		@@generator_nest += 1
+		@@generator_stack[@@generator_nest] = self
+		@b_no_type_name = false
+
+	begin
+
+		@q = []
+		comment = false
+#		b_asm   = false
+
+		# euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
+		TECS_LANG::set_kcode_binary
+
+		# 800U, 0xffLL など (整数リテラルに共通の修飾子)
+		integer_qualifier = "([Uu][Ll][Ll]|[Uu][Ll]|[Uu]|[Ll][Ll]|[Ll])?"
+
+		files.each {|file|
+			lineno = 1
+		begin
+#2.0		IO.foreach(file) {|line|
+			TECSIO.foreach(file) {|line|
+			col = 1
+			line.rstrip!
+
+			until line.empty?
+
+				if comment
+					case line
+					# コメント終了
+					when /\A\*\//
+						comment = false
+					when /\A./
+						;
+					end
+				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 進数定数
+					when /\A0x[0-9A-Fa-f]+#{integer_qualifier}/
+						@q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
+					# 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\"       最後の " 忘れ)で無限ループ
+#					when /\A"(?:[^"\\]+|\\.)*"/
+					when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
+						@q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
+					# 行コメント
+					when /\A\/\/.*$/
+						# 読み飛ばすだけ
+					# コメント開始
+					when /\A\/\*/
+						comment = true
+					when /\A>>=/, /\A<<=/, /\A>>/,  /\A<</
+						@q << [$&, Token.new($&, file, lineno, col)]
+					when /\A\+=/, /\A\-=/, /\A\*=/, /\A\/=/, /\A%=/, /\A&=/, /\A\|=/, /\A\^=/
+						@q << [$&, Token.new($&, file, lineno, col)]
+					when /\A::/, /\A==/, /\A!=/, /\A>=/, /\A<=/, /\A\->/, /\A\+\+/, /\A\-\-/
+						@q << [$&, Token.new($&, file, lineno, col)]
+					when /\A\|\|/, /\A\&\&/
+						@q << [$&, Token.new($&, file, lineno, col)]
+					when /\A./
+						@q << [$&, Token.new($&, file, lineno, col)]
+					else
+						raise
+					end
+				end
+
+				line = $'
+				col += $&.length
+			end
+
+			lineno += 1
+		}
+
+		rescue => evar
+			Generator.error( "B1002 while open or reading \'$1\'" , file )
+			print_exception( evar )
+		end
+	}
+
+	# 終了の印
+	@q << nil
+
+	@yydebug = true
+	do_parse
+
+		ensure
+			@@generator_nest -= 1
+			TECS_LANG::reset_kcode
+		end
+
+	end
+
+
+	def next_token
+		token = @q.shift
+
+		if token then
+			@@current_locale[@@generator_nest] = token[1].locale
+
+			case token[1].val
+			when ";", ":", ",", "(", ")", "{", "}"
+			set_no_type_name false
+			when ".", "->"
+			set_no_type_name true
+			end
+
+			# TYPE_NAME トークンへ置き換え
+			if @b_no_type_name == false
+				if token[0] == :IDENTIFIER && Namespace.is_typename?( token[1].val ) then
+					token[0] = :TYPE_NAME
+					locale = @@current_locale[@@generator_nest]
 #print( "#{locale[0]}: line #{locale[1]} : #{token[0]} '#{token[1].val}: type_name'\n" )
-        end
-      end
-
-      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
-        locale = @@current_locale[@@generator_nest]
-        if token then
-          print( "#{locale[0]}: line #{locale[1]} : #{token[0]} '#{token[1].val}'\n" )
-        else
-          print( "#{locale[0]}: line #{locale[1]} : EOF\n" )
-        end
-      end
-    end
-
-    token
-  end
-
-  def on_error(t, v, vstack)
-    if v == "$" then
-     Generator.error( "B1003 Unexpected EOF"  )
-    else
-     Generator.error( "B1004 syntax error near \'$1\'" , v.val )
-    end
-
-  end
-
-  def self.current_locale
-    @@current_locale[ @@generator_nest ]
-  end
-
-  @@n_error = 0
-  @@n_warning = 0
-  @@n_info = 0
-
-  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
-  def self.error( msg )
-    @@n_error += 1
-    locale = @@current_locale[ @@generator_nest ]
-
-    if locale then
-      Console.puts "error: #{locale[0]}: line #{locale[1]} #{msg}"
-    else
-      Console.puts "error: #{msg}"
-    end
-  end
-
-  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
-  def self.warning( msg )
-    @@n_warning += 1
-    locale = @@current_locale[ @@generator_nest ]
-    Console.puts "warning: #{locale[0]}: line #{locale[1]} #{msg}"
-  end
-
-  # このメソッドは構文解析、意味解析からのみ呼出し可
-  def self.info( msg )
-    @@n_info += 1
-    locale = @@current_locale[ @@generator_nest ]
-    Console.puts "info: #{locale[0]}: line #{locale[1]} #{msg}"
-  end
-
-  def self.get_n_error
-    @@n_error
-  end
-
-  def self.get_n_warning
-    @@n_warning
-  end
-
-  def self.get_nest
-    @@generator_nest
-  end
-
-  def set_no_type_name b_no_type_name
-    locale = @@current_locale[ @@generator_nest ]
+				end
+			end
+
+			if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
+				locale = @@current_locale[@@generator_nest]
+				if token then
+					print( "#{locale[0]}: line #{locale[1]} : #{token[0]} '#{token[1].val}'\n" )
+				else
+					print( "#{locale[0]}: line #{locale[1]} : EOF\n" )
+				end
+			end
+		end
+
+		token
+	end
+
+	def on_error(t, v, vstack)
+		if v == "$" then
+			Generator.error( "B1003 Unexpected EOF"  )
+		else
+			Generator.error( "B1004 syntax error near \'$1\'" , v.val )
+		end
+
+	end
+
+	def self.current_locale
+		@@current_locale[ @@generator_nest ]
+	end
+
+	@@n_error = 0
+	@@n_warning = 0
+	@@n_info = 0
+
+	# このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
+	def self.error( msg )
+		@@n_error += 1
+		locale = @@current_locale[ @@generator_nest ]
+
+		if locale then
+			Console.puts "#{locale[0]}:#{locale[1]}: error: #{msg}"
+		else
+			Console.puts "error: #{msg}"
+		end
+	end
+
+	# このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
+	def self.warning( msg )
+		@@n_warning += 1
+		locale = @@current_locale[ @@generator_nest ]
+		Console.puts "warning: #{locale[0]}: line #{locale[1]} #{msg}"
+	end
+
+	# このメソッドは構文解析、意味解析からのみ呼出し可
+	def self.info( msg )
+		@@n_info += 1
+		locale = @@current_locale[ @@generator_nest ]
+		Console.puts "info: #{locale[0]}: line #{locale[1]} #{msg}"
+	end
+
+	def self.get_n_error
+		@@n_error
+	end
+
+	def self.get_n_warning
+		@@n_warning
+	end
+
+	def self.get_nest
+		@@generator_nest
+	end
+
+	def set_no_type_name b_no_type_name
+		locale = @@current_locale[ @@generator_nest ]
 #print "b_no_type_name=#{b_no_type_name} #{locale[0]}: line #{locale[1]}\n"
-    @b_no_type_name = b_no_type_name
-  end
+		@b_no_type_name = b_no_type_name
+	end
 
 ...end C_parser.y.rb/module_eval...
@@ -302,127 +309,145 @@
 
 clist = [
-'106,107,108,109,110,112,70,113,68,181,302,143,55,118,119,208,117,120',
-'121,122,123,124,125,106,107,108,109,110,112,337,113,209,336,210,143',
-'76,118,119,170,117,120,121,122,123,124,125,305,69,301,67,350,28,29,106',
-'107,108,109,110,112,75,113,28,29,162,143,77,118,119,170,117,120,121',
-'122,123,124,125,169,79,205,206,353,306,307,308,309,310,311,312,313,314',
-'315,264,55,144,8,9,10,11,15,16,17,18,19,20,21,174,267,23,25,27,28,29',
-'197,198,375,263,144,106,107,108,109,110,112,346,113,342,197,198,143',
-'173,118,119,153,117,120,121,122,123,124,125,106,107,108,109,110,112',
-'144,113,357,341,3,143,274,118,119,253,117,120,121,122,123,124,125,106',
-'107,108,109,110,112,54,113,199,200,361,143,53,118,119,98,117,120,121',
-'122,123,124,125,106,107,108,109,110,112,345,113,363,83,364,143,82,118',
-'119,346,117,120,121,122,123,124,125,81,144,249,83,274,253,82,253,53',
-'106,107,108,109,110,112,337,113,55,336,365,236,366,118,119,144,117,120',
-'121,122,123,124,125,54,249,367,194,253,97,53,53,195,196,81,199,200,55',
-'55,144,230,89,8,9,10,11,15,16,17,18,19,20,21,79,372,23,25,27,28,29,199',
-'200,144,231,88,232,233,234,235,87,237,238,240,241,242,243,194,377,194',
-'199,200,195,196,195,196,378,39,40,41,42,43,44,45,46,144,106,107,108',
-'109,110,112,379,113,205,206,380,143,381,118,119,382,117,120,121,122',
-'123,124,125,106,107,108,109,110,112,384,113,197,198,385,143,386,118',
-'119,65,117,120,121,122,123,124,125,106,107,108,109,110,112,62,113,391',
-'37,392,143,393,118,119,394,117,120,121,122,123,124,125,106,107,108,109',
-'110,112,61,113,211,212,396,143,398,118,119,280,117,120,121,122,123,124',
-'125,47,144,279,36,277,8,9,10,11,15,16,17,18,19,20,21,271,37,23,25,27',
-'28,29,270,144,38,8,9,10,11,15,16,17,18,19,20,21,199,200,23,25,27,28',
-'29,269,97,256,144,255,39,40,41,42,43,44,45,46,36,247,8,9,10,11,15,16',
-'17,18,19,20,21,144,246,23,25,27,28,29,245,32,38,106,107,108,109,110',
-'112,216,113,215,210,209,143,208,118,119,207,117,120,121,122,123,124',
-'125,39,40,41,42,43,44,45,46,303,106,107,108,109,110,112,316,113,317',
-'319,320,236,321,118,119,323,117,120,121,122,123,124,125,54,54,54,324',
-'54,325,53,53,53,326,53,329,176,55,55,55,230,55,8,9,10,11,15,16,17,18',
-'19,20,21,79,175,23,25,27,28,29,77,97,144,231,171,232,233,234,235,163',
-'237,238,240,241,242,243,183,348,184,349,185,186,187,207,,,39,40,41,42',
-'43,44,45,46,144,106,107,108,109,110,112,,113,,,,143,,118,119,,117,120',
-'121,122,123,124,125,,,106,107,108,109,110,112,,113,,,,236,,118,119,',
-'117,120,121,122,123,124,125,54,54,54,,54,,53,53,53,,53,,,55,55,55,230',
-'55,8,9,10,11,15,16,17,18,19,20,21,79,,23,25,27,28,29,,,,231,,232,233',
-'234,235,144,237,238,240,241,242,243,201,202,203,204,201,202,203,204',
-',,39,40,41,42,43,44,45,46,144,106,107,108,109,110,112,,113,,,,236,,118',
-'119,,117,120,121,122,123,124,125,54,201,202,203,204,,53,,,,,,,55,,,230',
-',8,9,10,11,15,16,17,18,19,20,21,79,,23,25,27,28,29,,,,231,,232,233,234',
-'235,,237,238,240,241,242,243,,,,,,,,,,,39,40,41,42,43,44,45,46,144,106',
-'107,108,109,110,112,,113,,,,143,,118,119,,117,120,121,122,123,124,125',
-'106,107,108,109,110,112,,113,,,,143,,118,119,,117,120,121,122,123,124',
-'125,106,107,108,109,110,112,,113,,,,143,,118,119,,117,120,121,122,123',
-'124,125,106,107,108,109,110,112,,113,,,,143,,118,119,,117,120,121,122',
-'123,124,125,,144,,,,,,,,106,107,108,109,110,112,,113,,,,143,,118,119',
-'144,117,120,121,122,123,124,125,106,107,108,109,110,112,,113,,368,,143',
-',118,119,144,117,120,121,122,123,124,125,,,,,,,,106,107,108,109,110',
-'112,,113,144,,,236,,118,119,,117,120,121,122,123,124,125,,,,,,,,,,,',
-',,,,,230,144,8,9,10,11,15,16,17,18,19,20,21,79,,23,25,27,28,29,,,,231',
-'144,232,233,234,235,,237,238,240,241,242,243,,,,,,,,,,,39,40,41,42,43',
-'44,45,46,144,106,107,108,109,110,112,,113,,,,236,,118,119,,117,120,121',
-'122,123,124,125,,,,,,,,,,,,,,,,,230,,8,9,10,11,15,16,17,18,19,20,21',
-'79,,23,25,27,28,29,,,,231,,232,233,234,235,,237,238,240,241,242,243',
-',,,,,,,,,,39,40,41,42,43,44,45,46,144,106,107,108,109,110,112,,113,',
-',,236,,118,119,,117,120,121,122,123,124,125,,,,,,,,,,,,,,,,,230,,8,9',
-'10,11,15,16,17,18,19,20,21,79,,23,25,27,28,29,,,,231,,232,233,234,235',
-',237,238,240,241,242,243,,,,,,,,,,,39,40,41,42,43,44,45,46,144,106,107',
-'108,109,110,112,,113,,,,143,,118,119,,117,120,121,122,123,124,125,106',
-'107,108,109,110,112,,113,,,,143,,118,119,,117,120,121,122,123,124,125',
-'106,107,108,109,110,112,,113,,,,143,,118,119,,117,120,121,122,123,124',
-'125,106,107,108,109,110,112,,113,,,,143,,118,119,,117,120,121,122,123',
-'124,125,,144,,,,,141,,,,,,,142,106,107,108,109,110,112,,113,,147,144',
-'143,,118,119,,117,120,121,122,123,124,125,106,107,108,109,110,112,,113',
-',,144,143,,118,119,,117,120,121,122,123,124,125,106,107,108,109,110',
-'112,,113,,,144,143,,118,119,,117,120,121,122,123,124,125,106,107,108',
-'109,110,112,,113,,,,143,,118,119,,117,120,121,122,123,124,125,,144,',
-',,,,,,106,107,108,109,110,112,,113,,,,143,,118,119,144,117,120,121,122',
-'123,124,125,106,107,108,109,110,112,,113,,,,143,,118,119,144,117,120',
-'121,122,123,124,125,106,107,108,109,110,112,,113,,,,143,,118,119,144',
-'117,120,121,122,123,124,125,106,107,108,109,110,112,,113,,,,143,,118',
-'119,,117,120,121,122,123,124,125,,144,,,,,141,351,,,,,,142,106,107,108',
-'109,110,112,,113,,,144,143,,118,119,,117,120,121,122,123,124,125,106',
-'107,108,109,110,112,,113,,,144,143,,118,119,,117,120,121,122,123,124',
-'125,106,107,108,109,110,112,,113,,,144,143,,118,119,,117,120,121,122',
-'123,124,125,106,107,108,109,110,112,,113,,,,143,,118,119,,117,120,121',
-'122,123,124,125,,144,,,,,,,,106,107,108,109,110,112,,113,,,,143,,118',
-'119,144,117,120,121,122,123,124,125,106,107,108,109,110,112,,113,,,',
-'143,,118,119,144,117,120,121,122,123,124,125,106,107,108,109,110,112',
-',113,,,,143,,118,119,144,117,120,121,122,123,124,125,,,,,,,,,,106,107',
-'108,109,110,112,,113,,,,236,,118,119,144,117,120,121,122,123,124,125',
-',,,,,,,,,,,,,,,144,230,,8,9,10,11,15,16,17,18,19,20,21,79,239,23,25',
-'27,28,29,,,144,231,,232,233,234,235,,237,238,240,241,242,243,,,,,,,',
-',,,39,40,41,42,43,44,45,46,144,106,107,108,109,110,112,,113,,338,,143',
-',118,119,,117,120,121,122,123,124,125,106,107,108,109,110,112,,113,',
-',,143,,118,119,,117,120,121,122,123,124,125,8,9,10,11,15,16,17,18,19',
-'20,21,,,23,25,27,28,29,8,9,10,11,15,16,17,18,19,20,21,,,23,25,27,28',
-'29,,106,107,108,109,110,112,,113,,,144,143,,118,119,,117,120,121,122',
-'123,124,125,106,107,108,109,110,112,,113,,,144,143,,118,119,,117,120',
-'121,122,123,124,125,106,107,108,109,110,112,,113,,,,143,,118,119,,117',
-'120,121,122,123,124,125,106,107,108,109,110,189,,113,,,,143,,118,119',
-',117,120,121,122,123,124,125,,144,,,,,,,,106,107,108,109,110,191,,113',
-',,,143,,118,119,144,117,120,121,122,123,124,125,106,107,108,109,110',
-'191,,113,,,,143,,118,119,144,117,120,121,122,123,124,125,106,107,108',
-'109,110,112,,113,,,,143,,118,119,144,117,120,121,122,123,124,125,106',
-'107,108,109,110,112,,113,,,,143,,118,119,,117,120,121,122,123,124,125',
-',144,,,,,141,,,,,,,142,,,328,,106,107,108,109,110,112,144,113,,,,143',
-',118,119,,117,120,121,122,123,124,125,,,,,,,144,,,,,,,,,,,106,107,108',
-'109,110,112,,113,,,,236,144,118,119,,117,120,121,122,123,124,125,,,',
-',,,,,,,,,,,,,230,,8,9,10,11,15,16,17,18,19,20,21,79,144,23,25,27,28',
-'29,,,,231,,232,233,234,235,,237,238,240,241,242,243,,,,,,,274,334,,253',
-'39,40,41,42,43,44,45,46,144,55,,,,,249,334,,253,,,53,,,,,,,55,,,,,8',
-'9,10,11,15,16,17,18,19,20,21,,,23,25,27,28,29,8,9,10,11,15,16,17,18',
-'19,20,21,,,23,25,27,28,29,370,,,,,,,,39,40,41,42,43,44,45,46,,,149,',
-',,,,,,39,40,41,42,43,44,45,46,,8,9,10,11,15,16,17,18,19,20,21,,,23,25',
-'27,28,29,8,9,10,11,15,16,17,18,19,20,21,,,23,25,27,28,29,,,,330,,,,',
-'39,40,41,42,43,44,45,46,,,,,,,,,,,39,40,41,42,43,44,45,46,8,9,10,11',
-'15,16,17,18,19,20,21,,,23,25,27,28,29,8,9,10,11,15,16,17,18,19,20,21',
-',,23,25,27,28,29,,,,,,,,,39,40,41,42,43,44,45,46,,,,,,,,,,,39,40,41',
-'42,43,44,45,46,8,9,10,11,15,16,17,18,19,20,21,,340,23,25,27,28,29,8',
-'9,10,11,15,16,17,18,19,20,21,,164,23,25,27,28,29,,,,,,,,,39,40,41,42',
-'43,44,45,46,,,,,,,,,,,39,40,41,42,43,44,45,46,8,9,10,11,15,16,17,18',
-'19,20,21,,,23,25,27,28,29,8,9,10,11,15,16,17,18,19,20,21,,,23,25,27',
-'28,29,,,,,,,,,39,40,41,42,43,44,45,46,,,,,,,,,,,39,40,41,42,43,44,45',
-'46,8,9,10,11,15,16,17,18,19,20,21,,,23,25,27,28,29,8,9,10,11,15,16,17',
-'18,19,20,21,,257,23,25,27,28,29,,,,,,,,,39,40,41,42,43,44,45,46,,,,',
-',,,,,,39,40,41,42,43,44,45,46,8,9,10,11,15,16,17,18,19,20,21,,,23,25',
-'27,28,29,8,9,10,11,15,16,17,18,19,20,21,,262,23,25,27,28,29,,,,,,,,',
-'39,40,41,42,43,44,45,46,,,,,,,,,,,39,40,41,42,43,44,45,46,8,9,10,11',
-'15,16,17,18,19,20,21,,,23,25,27,28,29,8,9,10,11,15,16,17,18,19,20,21',
-',,23,25,27,28,29,,,,,,,,,39,40,41,42,43,44,45,46,,,,,,,,,,,39,40,41',
-'42,43,44,45,46,8,9,10,11,15,16,17,18,19,20,21,,,23,25,27,28,29' ]
-        racc_action_table = arr = ::Array.new(2875, nil)
+'111,112,113,114,115,117,294,118,56,298,55,163,54,123,124,82,54,262,122',
+'125,126,127,128,129,130,111,112,113,114,115,117,217,118,271,391,101',
+'163,91,123,124,82,271,271,122,125,126,127,128,129,130,56,70,171,72,82',
+'69,397,71,80,32,33,34,224,309,271,223,216,226,84,227,228,229,84,392',
+'101,325,272,171,298,312,80,164,165,172,393,173,174,175,176,177,178,179',
+'180,149,181,101,218,79,308,369,388,32,33,34,265,266,164,165,172,73,173',
+'174,175,176,177,178,179,180,149,181,111,112,113,114,115,117,384,118',
+'32,33,34,163,78,123,124,82,440,402,122,125,126,127,128,129,130,55,219',
+'271,271,383,101,54,332,248,325,387,55,298,249,250,56,382,54,111,112',
+'113,114,115,117,56,118,56,171,331,163,395,123,124,82,276,210,122,125',
+'126,127,128,129,130,420,55,378,210,248,377,396,54,330,249,250,393,92',
+'164,165,172,56,173,174,175,176,177,178,179,180,149,181,171,9,10,11,12',
+'13,14,15,16,17,18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,355,356',
+'213,164,165,172,204,173,174,175,176,177,178,179,180,149,181,111,112',
+'113,114,115,117,404,118,93,378,203,163,377,123,124,82,193,271,122,125',
+'126,127,128,129,130,111,112,113,114,115,117,290,118,101,86,55,163,85',
+'123,124,82,54,291,122,125,126,127,128,129,130,56,357,171,13,14,15,16',
+'17,18,19,20,21,22,26,28,30,31,32,33,34,248,86,322,438,85,249,250,171',
+'434,435,370,164,165,172,271,173,174,175,176,177,178,179,180,149,181',
+'259,260,261,321,255,256,257,258,315,316,262,164,165,172,271,173,174',
+'175,176,177,178,179,180,149,181,111,112,113,114,115,117,403,118,317',
+'318,263,163,264,123,124,82,320,271,122,125,126,127,128,129,130,13,14',
+'15,16,17,18,19,20,21,22,26,28,30,31,32,33,34,437,111,112,113,114,115',
+'117,360,118,400,171,271,163,368,123,124,82,166,103,122,125,126,127,128',
+'129,130,102,55,255,256,257,258,310,54,255,256,257,258,405,164,165,172',
+'56,173,174,175,176,177,178,179,180,149,181,171,9,10,11,12,13,14,15,16',
+'17,18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,259,260,301,164,165',
+'172,300,173,174,175,176,177,178,179,180,149,181,111,112,113,114,115',
+'117,408,118,253,254,292,163,409,123,124,82,253,254,122,125,126,127,128',
+'129,130,111,112,113,114,115,117,410,118,253,254,55,163,289,123,124,82',
+'54,288,122,125,126,127,128,129,130,56,415,171,13,14,15,16,17,18,19,20',
+'21,22,26,28,30,31,32,33,34,253,254,253,254,251,252,261,171,211,212,285',
+'164,165,172,284,173,174,175,176,177,178,179,180,149,181,237,238,239',
+'240,241,242,243,244,245,246,247,164,165,172,283,173,174,175,176,177',
+'178,179,180,149,181,111,112,113,114,115,117,282,118,251,252,389,163',
+'389,123,124,82,251,252,122,125,126,127,128,129,130,111,112,113,114,115',
+'117,101,118,67,82,55,163,64,123,124,82,54,63,122,125,126,127,128,129',
+'130,56,55,171,55,55,294,280,54,298,54,54,54,279,430,431,432,56,433,56',
+'56,56,365,436,278,263,275,264,171,273,270,48,164,165,172,444,173,174',
+'175,176,177,178,179,180,149,181,269,3,,,,,,,,,,164,165,172,,173,174',
+'175,176,177,178,179,180,149,181,111,112,113,114,115,117,,118,,,,163',
+',123,124,82,,,122,125,126,127,128,129,130,111,112,113,114,115,117,,118',
+',,,148,,123,124,,,,122,125,126,127,128,129,130,,,171,111,112,113,114',
+'115,117,,118,,,,148,,123,124,,,,122,125,126,127,128,129,130,,,,164,165',
+'172,,173,174,175,176,177,178,179,180,149,181,,,,,,,111,112,113,114,115',
+'117,,118,,411,,148,,123,124,,,149,122,125,126,127,128,129,130,,,,111',
+'112,113,114,115,117,,118,,,,148,,123,124,,,149,122,125,126,127,128,129',
+'130,111,112,113,114,115,117,,118,,,,148,,123,124,,,,122,125,126,127',
+'128,129,130,,,171,,,,,,,,,,,,,149,,111,112,113,114,115,117,,118,,,171',
+'148,,123,124,,,,122,125,126,127,128,129,130,,149,,,,,,,,111,112,113',
+'114,115,117,,118,,,,148,,123,124,146,398,149,122,125,126,127,128,129',
+'130,111,112,113,114,115,117,,118,,,,148,,123,124,,,,122,125,126,127',
+'128,129,130,111,112,113,114,115,117,,118,,149,,148,,123,124,389,,,122',
+'125,126,127,128,129,130,,,,147,,,111,112,113,114,115,117,,118,,,,148',
+'149,123,124,,,,122,125,126,127,128,129,130,111,112,113,114,115,117,',
+'118,,379,,148,149,123,124,,,,122,125,126,127,128,129,130,,,,,,,,,,,',
+',149,,,,,111,112,113,114,115,117,,118,,,,148,,123,124,,,,122,125,126',
+'127,128,129,130,,149,,,,,,,,,,,,,,,,,,,,,,,,,149,171,9,10,11,12,13,14',
+'15,16,17,18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,111,112,113',
+'114,115,117,,118,,,,148,,123,124,149,,,122,125,126,127,128,129,130,111',
+'112,113,114,115,117,,118,,,,148,,123,124,146,,,122,125,126,127,128,129',
+'130,111,112,113,114,115,117,,118,,,,148,,123,124,,,,122,125,126,127',
+'128,129,130,,111,112,113,114,115,117,,118,,,,148,,123,124,,,149,122',
+'125,126,127,128,129,130,,,147,,,111,112,113,114,115,117,,118,,,,148',
+'149,123,124,,,,122,125,126,127,128,129,130,111,112,113,114,115,117,',
+'118,,,,148,149,123,124,,,,122,125,126,127,128,129,130,,111,112,113,114',
+'115,117,,118,,,,148,149,123,124,,,,122,125,126,127,128,129,130,111,112',
+'113,114,115,117,,118,,,,148,,123,124,146,,149,122,125,126,127,128,129',
+'130,111,112,113,114,115,117,427,118,,,,148,,123,124,,,149,122,125,126',
+'127,128,129,130,,111,112,113,114,115,117,,118,,,,148,,123,124,,,149',
+'122,125,126,127,128,129,130,,,147,,,111,112,113,114,115,117,,118,,185',
+',148,149,123,124,,,,122,125,126,127,128,129,130,111,112,113,114,115',
+'117,,118,,,,148,149,123,124,,,,122,125,126,127,128,129,130,,111,112',
+'113,114,115,117,,118,,,,148,149,123,124,,,,122,125,126,127,128,129,130',
+'111,112,113,114,115,117,,118,,,,148,,123,124,,,149,122,125,126,127,128',
+'129,130,111,112,113,114,115,117,,118,,,,148,,123,124,,,149,122,125,126',
+'127,128,129,130,,111,112,113,114,115,117,,118,,,,148,,123,124,,,149',
+'122,125,126,127,128,129,130,111,112,113,114,115,117,,118,,,,148,,123',
+'124,,,149,122,125,126,127,128,129,130,111,112,113,114,115,117,,118,',
+',,148,,123,124,,,149,122,125,126,127,128,129,130,,111,112,113,114,115',
+'117,,118,,,,148,,123,124,,,149,122,125,126,127,128,129,130,111,112,113',
+'114,115,117,,118,,,,148,,123,124,,,149,122,125,126,127,128,129,130,111',
+'112,113,114,115,117,,118,,,,148,,123,124,,,149,122,125,126,127,128,129',
+'130,,111,112,113,114,115,117,,118,,,,148,,123,124,,,149,122,125,126',
+'127,128,129,130,111,112,113,114,115,117,,118,,,,148,,123,124,,,149,122',
+'125,126,127,128,129,130,111,112,113,114,115,117,,118,,,,148,,123,124',
+',,149,122,125,126,127,128,129,130,,111,112,113,114,115,117,,118,,,,148',
+',123,124,,,149,122,125,126,127,128,129,130,111,112,113,114,115,117,',
+'118,,,,148,,123,124,,,149,122,125,126,127,128,129,130,111,112,113,114',
+'115,117,,118,,,,148,,123,124,146,,149,122,125,126,127,128,129,130,,111',
+'112,113,114,115,117,,118,,,,148,,123,124,,,149,122,125,126,127,128,129',
+'130,,,,,,,,,,,,,,,,,,149,,,,,,,,,,147,,,111,112,113,114,115,117,,118',
+',,,148,149,123,124,,,,122,125,126,127,128,129,130,,111,112,113,114,115',
+'117,,118,,,,148,149,123,124,,,,122,125,126,127,128,129,130,,,,,,,13',
+'14,15,16,17,18,19,20,21,22,26,28,30,31,32,33,34,,,111,112,113,114,115',
+'117,,118,,,,148,,123,124,,,149,122,125,126,127,128,129,130,,111,112',
+'113,114,115,231,,118,,,,148,,123,124,,,149,122,125,126,127,128,129,130',
+'111,112,113,114,115,233,,118,,,,148,,123,124,,,,122,125,126,127,128',
+'129,130,111,112,113,114,115,233,,118,,,,148,,123,124,,,149,122,125,126',
+'127,128,129,130,,,,,,,,,,,,,111,112,113,114,115,117,149,118,,,,148,',
+'123,124,,,,122,125,126,127,128,129,130,111,112,113,114,115,117,149,118',
+',,,148,,123,124,,,,122,125,126,127,128,129,130,,,,,,,149,13,14,15,16',
+'17,18,19,20,21,22,26,28,30,31,32,33,34,,,111,112,113,114,115,117,,118',
+',,,148,,123,124,,,149,122,125,126,127,128,129,130,111,112,113,114,115',
+'117,327,118,,,,148,,123,124,,,149,122,125,126,127,128,129,130,,,,,,',
+',13,14,15,16,17,18,19,20,21,22,26,28,30,31,32,33,34,,,111,112,113,114',
+'115,117,,118,,,,148,,123,124,,,149,122,125,126,127,128,129,130,111,112',
+'113,114,115,117,,118,,,,148,,123,124,,,149,122,125,126,127,128,129,130',
+'111,112,113,114,115,117,,118,,,,148,,123,124,,,,122,125,126,127,128',
+'129,130,,111,112,113,114,115,117,429,118,,,,148,,123,124,,,149,122,125',
+'126,127,128,129,130,,287,,,,111,112,113,114,115,117,,118,,,,148,149',
+'123,124,146,442,,122,125,126,127,128,129,130,111,112,113,114,115,117',
+',118,,,,148,149,123,124,,,,122,125,126,127,128,129,130,,111,112,113',
+'114,115,117,,118,,,,148,149,123,124,,,,122,125,126,127,128,129,130,',
+',147,,,,,,,,,,,,,,46,149,,,,,,,,,,,,,,,,,,,,,,,,,149,,,46,,,,,,,,,,',
+',,,,,,,,,,,,149,45,9,10,11,12,13,14,15,16,17,18,19,20,21,22,26,28,30',
+'31,32,33,34,35,36,37,38,,,47,45,9,10,11,12,13,14,15,16,17,18,19,20,21',
+'22,26,28,30,31,32,33,34,35,36,37,38,,41,47,294,375,,298,,,54,,,,,,,',
+',56,,,,,,,,,,325,375,,298,,,,,,,,,,,,56,,,,,,,,9,10,11,12,13,14,15,16',
+'17,18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,9,10,11,12,13,14',
+'15,16,17,18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,188,,,,,192',
+',,,,,,,,,,,,,,,,,,,413,,,,,,,,,,,,,,,,,,,,,,9,10,11,12,13,14,15,16,17',
+'18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,9,10,11,12,13,14,15',
+'16,17,18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,371,9,10,11,12',
+'13,14,15,16,17,18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,,,,,',
+'205,,,,,,,,,,,,9,10,11,12,13,14,15,16,17,18,19,20,21,22,26,28,30,31',
+'32,33,34,35,36,37,38,9,10,11,12,13,14,15,16,17,18,19,20,21,22,26,28',
+'30,31,32,33,34,35,36,37,38,307,,,,,,,,,,,,,,,,,,,,,,,,,381,,,,,,,,,',
+',,9,10,11,12,13,14,15,16,17,18,19,20,21,22,26,28,30,31,32,33,34,35,36',
+'37,38,9,10,11,12,13,14,15,16,17,18,19,20,21,22,26,28,30,31,32,33,34',
+'35,36,37,38,302,9,10,11,12,13,14,15,16,17,18,19,20,21,22,26,28,30,31',
+'32,33,34,35,36,37,38,,,,,,,,,,,,9,10,11,12,13,14,15,16,17,18,19,20,21',
+'22,26,28,30,31,32,33,34,35,36,37,38,9,10,11,12,13,14,15,16,17,18,19',
+'20,21,22,26,28,30,31,32,33,34,35,36,37,38,9,10,11,12,13,14,15,16,17',
+'18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,9,10,11,12,13,14,15',
+'16,17,18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,9,10,11,12,13',
+'14,15,16,17,18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,9,10,11',
+'12,13,14,15,16,17,18,19,20,21,22,26,28,30,31,32,33,34,35,36,37,38,9',
+'10,11,12,13,14,15,16,17,18,19,20,21,22,26,28,30,31,32,33,34,35,36,37',
+'38' ]
+        racc_action_table = arr = ::Array.new(3198, nil)
         idx = 0
         clist.each do |str|
@@ -434,133 +459,147 @@
 
 clist = [
-'210,210,210,210,210,210,26,210,24,114,213,210,55,210,210,297,210,210',
-'210,210,210,210,210,211,211,211,211,211,211,332,211,298,332,299,211',
-'48,211,211,95,211,211,211,211,211,211,211,217,26,213,24,300,55,55,189',
-'189,189,189,189,189,48,189,114,114,90,189,50,189,189,172,189,189,189',
-'189,189,189,189,95,50,132,132,303,217,217,217,217,217,217,217,217,217',
-'217,166,85,210,189,189,189,189,189,189,189,189,189,189,189,101,172,189',
-'189,189,189,189,287,287,347,166,211,394,394,394,394,394,394,347,394',
-'259,288,288,394,101,394,394,84,394,394,394,394,394,394,394,181,181,181',
-'181,181,181,189,181,318,259,1,181,273,181,181,273,181,181,181,181,181',
-'181,181,194,194,194,194,194,194,51,194,289,289,322,194,51,194,194,70',
-'194,194,194,194,194,194,194,195,195,195,195,195,195,275,195,324,52,327',
-'195,52,195,195,275,195,195,195,195,195,195,195,51,394,248,80,180,248',
-'80,180,248,392,392,392,392,392,392,252,392,180,252,330,392,333,392,392',
-'181,392,392,392,392,392,392,392,342,152,335,286,152,69,342,152,286,286',
-'248,290,290,342,152,194,392,66,392,392,392,392,392,392,392,392,392,392',
-'392,392,339,392,392,392,392,392,291,291,195,392,64,392,392,392,392,63',
-'392,392,392,392,392,392,285,354,128,292,292,285,285,128,128,355,392',
-'392,392,392,392,392,392,392,392,381,381,381,381,381,381,356,381,295',
-'295,357,381,358,381,381,359,381,381,381,381,381,381,381,380,380,380',
-'380,380,380,365,380,129,129,369,380,371,380,380,22,380,380,380,380,380',
-'380,380,196,196,196,196,196,196,14,196,382,32,387,196,389,196,196,390',
-'196,196,196,196,196,196,196,197,197,197,197,197,197,12,197,137,137,393',
-'197,397,197,197,185,197,197,197,197,197,197,197,3,381,184,32,182,32',
-'32,32,32,32,32,32,32,32,32,32,178,2,32,32,32,32,32,177,380,32,72,72',
-'72,72,72,72,72,72,72,72,72,130,130,72,72,72,72,72,175,170,157,196,156',
-'32,32,32,32,32,32,32,32,2,150,2,2,2,2,2,2,2,2,2,2,2,197,148,2,2,2,2',
-'2,146,2,2,198,198,198,198,198,198,144,198,142,136,135,198,134,198,198',
-'133,198,198,198,198,198,198,198,2,2,2,2,2,2,2,2,215,379,379,379,379',
-'379,379,231,379,232,234,235,379,236,379,379,238,379,379,379,379,379',
-'379,379,160,94,54,240,264,241,160,94,54,242,264,244,111,160,94,54,379',
-'264,379,379,379,379,379,379,379,379,379,379,379,379,105,379,379,379',
-'379,379,104,98,198,379,97,379,379,379,379,91,379,379,379,379,379,379',
-'115,278,115,281,115,115,115,296,,,379,379,379,379,379,379,379,379,379',
-'171,171,171,171,171,171,,171,,,,171,,171,171,,171,171,171,171,171,171',
-'171,,,378,378,378,378,378,378,,378,,,,378,,378,378,,378,378,378,378',
-'378,378,378,76,4,74,,174,,76,4,74,,174,,,76,4,74,378,174,378,378,378',
-'378,378,378,378,378,378,378,378,378,,378,378,378,378,378,,,,378,,378',
-'378,378,378,171,378,378,378,378,378,378,294,294,294,294,131,131,131',
-'131,,,378,378,378,378,378,378,378,378,378,361,361,361,361,361,361,,361',
-',,,361,,361,361,,361,361,361,361,361,361,361,218,293,293,293,293,,218',
-',,,,,,218,,,361,,361,361,361,361,361,361,361,361,361,361,361,361,,361',
-'361,361,361,361,,,,361,,361,361,361,361,,361,361,361,361,361,361,,,',
-',,,,,,,361,361,361,361,361,361,361,361,361,199,199,199,199,199,199,',
-'199,,,,199,,199,199,,199,199,199,199,199,199,199,350,350,350,350,350',
-'350,,350,,,,350,,350,350,,350,350,350,350,350,350,350,346,346,346,346',
-'346,346,,346,,,,346,,346,346,,346,346,346,346,346,346,346,191,191,191',
-'191,191,191,,191,,,,191,,191,191,,191,191,191,191,191,191,191,,199,',
-',,,,,,200,200,200,200,200,200,,200,,,,200,,200,200,350,200,200,200,200',
-'200,200,200,336,336,336,336,336,336,,336,,336,,336,,336,336,346,336',
-'336,336,336,336,336,336,,,,,,,,323,323,323,323,323,323,,323,191,,,323',
-',323,323,,323,323,323,323,323,323,323,,,,,,,,,,,,,,,,,323,200,323,323',
-'323,323,323,323,323,323,323,323,323,323,,323,323,323,323,323,,,,323',
-'336,323,323,323,323,,323,323,323,323,323,323,,,,,,,,,,,323,323,323,323',
-'323,323,323,323,323,321,321,321,321,321,321,,321,,,,321,,321,321,,321',
-'321,321,321,321,321,321,,,,,,,,,,,,,,,,,321,,321,321,321,321,321,321',
-'321,321,321,321,321,321,,321,321,321,321,321,,,,321,,321,321,321,321',
-',321,321,321,321,321,321,,,,,,,,,,,321,321,321,321,321,321,321,321,321',
-'398,398,398,398,398,398,,398,,,,398,,398,398,,398,398,398,398,398,398',
-'398,,,,,,,,,,,,,,,,,398,,398,398,398,398,398,398,398,398,398,398,398',
-'398,,398,398,398,398,398,,,,398,,398,398,398,398,,398,398,398,398,398',
-'398,,,,,,,,,,,398,398,398,398,398,398,398,398,398,320,320,320,320,320',
-'320,,320,,,,320,,320,320,,320,320,320,320,320,320,320,319,319,319,319',
-'319,319,,319,,,,319,,319,319,,319,319,319,319,319,319,319,77,77,77,77',
-'77,77,,77,,,,77,,77,77,,77,77,77,77,77,77,77,317,317,317,317,317,317',
-',317,,,,317,,317,317,,317,317,317,317,317,317,317,,320,,,,,77,,,,,,',
-'77,82,82,82,82,82,82,,82,,82,319,82,,82,82,,82,82,82,82,82,82,82,183',
-'183,183,183,183,183,,183,,,77,183,,183,183,,183,183,183,183,183,183',
-'183,316,316,316,316,316,316,,316,,,317,316,,316,316,,316,316,316,316',
-'316,316,316,304,304,304,304,304,304,,304,,,,304,,304,304,,304,304,304',
-'304,304,304,304,,82,,,,,,,,201,201,201,201,201,201,,201,,,,201,,201',
-'201,183,201,201,201,201,201,201,201,202,202,202,202,202,202,,202,,,',
-'202,,202,202,316,202,202,202,202,202,202,202,302,302,302,302,302,302',
-',302,,,,302,,302,302,304,302,302,302,302,302,302,302,277,277,277,277',
-'277,277,,277,,,,277,,277,277,,277,277,277,277,277,277,277,,201,,,,,302',
-'302,,,,,,302,203,203,203,203,203,203,,203,,,202,203,,203,203,,203,203',
-'203,203,203,203,203,209,209,209,209,209,209,,209,,,302,209,,209,209',
-',209,209,209,209,209,209,209,212,212,212,212,212,212,,212,,,277,212',
-',212,212,,212,212,212,212,212,212,212,204,204,204,204,204,204,,204,',
-',,204,,204,204,,204,204,204,204,204,204,204,,203,,,,,,,,271,271,271',
-'271,271,271,,271,,,,271,,271,271,209,271,271,271,271,271,271,271,205',
-'205,205,205,205,205,,205,,,,205,,205,205,212,205,205,205,205,205,205',
-'205,206,206,206,206,206,206,,206,,,,206,,206,206,204,206,206,206,206',
-'206,206,206,,,,,,,,,,145,145,145,145,145,145,,145,,,,145,,145,145,271',
-'145,145,145,145,145,145,145,,,,,,,,,,,,,,,,205,145,,145,145,145,145',
-'145,145,145,145,145,145,145,145,145,145,145,145,145,145,,,206,145,,145',
-'145,145,145,,145,145,145,145,145,145,,,,,,,,,,,145,145,145,145,145,145',
-'145,145,145,253,253,253,253,253,253,,253,,253,,253,,253,253,,253,253',
-'253,253,253,253,253,112,112,112,112,112,112,,112,,,,112,,112,112,,112',
-'112,112,112,112,112,112,38,38,38,38,38,38,38,38,38,38,38,,,38,38,38',
-'38,38,112,112,112,112,112,112,112,112,112,112,112,,,112,112,112,112',
-'112,,207,207,207,207,207,207,,207,,,253,207,,207,207,,207,207,207,207',
-'207,207,207,208,208,208,208,208,208,,208,,,112,208,,208,208,,208,208',
-'208,208,208,208,208,116,116,116,116,116,116,,116,,,,116,,116,116,,116',
-'116,116,116,116,116,116,117,117,117,117,117,117,,117,,,,117,,117,117',
-',117,117,117,117,117,117,117,,207,,,,,,,,118,118,118,118,118,118,,118',
-',,,118,,118,118,208,118,118,118,118,118,118,118,119,119,119,119,119',
-'119,,119,,,,119,,119,119,116,119,119,119,119,119,119,119,141,141,141',
-'141,141,141,,141,,,,141,,141,141,117,141,141,141,141,141,141,141,243',
-'243,243,243,243,243,,243,,,,243,,243,243,,243,243,243,243,243,243,243',
-',118,,,,,141,,,,,,,141,,,243,,237,237,237,237,237,237,119,237,,,,237',
-',237,237,,237,237,237,237,237,237,237,,,,,,,141,,,,,,,,,,,233,233,233',
-'233,233,233,,233,,,,233,243,233,233,,233,233,233,233,233,233,233,,,',
-',,,,,,,,,,,,,233,,233,233,233,233,233,233,233,233,233,233,233,233,237',
-'233,233,233,233,233,,,,233,,233,233,233,233,,233,233,233,233,233,233',
-',,,,,,274,274,,274,233,233,233,233,233,233,233,233,233,274,,,,,249,249',
-',249,,,249,,,,,,,249,,,,,274,274,274,274,274,274,274,274,274,274,274',
-',,274,274,274,274,274,249,249,249,249,249,249,249,249,249,249,249,,',
-'249,249,249,249,249,337,,,,,,,,274,274,274,274,274,274,274,274,,,83',
-',,,,,,,249,249,249,249,249,249,249,249,,337,337,337,337,337,337,337',
-'337,337,337,337,,,337,337,337,337,337,83,83,83,83,83,83,83,83,83,83',
-'83,,,83,83,83,83,83,,,,247,,,,,337,337,337,337,337,337,337,337,,,,,',
-',,,,,83,83,83,83,83,83,83,83,247,247,247,247,247,247,247,247,247,247',
-'247,,,247,247,247,247,247,5,5,5,5,5,5,5,5,5,5,5,,,5,5,5,5,5,,,,,,,,',
-'247,247,247,247,247,247,247,247,,,,,,,,,,,5,5,5,5,5,5,5,5,254,254,254',
-'254,254,254,254,254,254,254,254,,254,254,254,254,254,254,92,92,92,92',
-'92,92,92,92,92,92,92,,92,92,92,92,92,92,,,,,,,,,254,254,254,254,254',
-'254,254,254,,,,,,,,,,,92,92,92,92,92,92,92,92,155,155,155,155,155,155',
-'155,155,155,155,155,,,155,155,155,155,155,89,89,89,89,89,89,89,89,89',
-'89,89,,,89,89,89,89,89,,,,,,,,,155,155,155,155,155,155,155,155,,,,,',
-',,,,,89,89,89,89,89,89,89,89,88,88,88,88,88,88,88,88,88,88,88,,,88,88',
-'88,88,88,158,158,158,158,158,158,158,158,158,158,158,,158,158,158,158',
-'158,158,,,,,,,,,88,88,88,88,88,88,88,88,,,,,,,,,,,158,158,158,158,158',
-'158,158,158,67,67,67,67,67,67,67,67,67,67,67,,,67,67,67,67,67,161,161',
-'161,161,161,161,161,161,161,161,161,,161,161,161,161,161,161,,,,,,,',
-',67,67,67,67,67,67,67,67,,,,,,,,,,,161,161,161,161,161,161,161,161,7',
-'7,7,7,7,7,7,7,7,7,7,,,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,,,6,6,6,6,6,,',
-',,,,,,7,7,7,7,7,7,7,7,,,,,,,,,,,6,6,6,6,6,6,6,6,73,73,73,73,73,73,73',
-'73,73,73,73,,,73,73,73,73,73' ]
-        racc_action_check = arr = ::Array.new(2875, nil)
+'440,440,440,440,440,440,293,440,56,293,52,440,293,440,440,440,52,139',
+'440,440,440,440,440,440,440,438,438,438,438,438,438,106,438,354,326',
+'103,438,65,438,438,438,151,326,438,438,438,438,438,438,438,88,29,440',
+'31,51,29,354,31,109,56,56,56,120,207,286,120,106,120,293,120,120,120',
+'52,328,212,324,151,438,324,212,51,440,440,440,328,440,440,440,440,440',
+'440,440,440,440,440,318,110,49,207,286,318,88,88,88,142,142,438,438',
+'438,31,438,438,438,438,438,438,438,438,438,438,436,436,436,436,436,436',
+'304,436,120,120,120,436,49,436,436,436,428,362,436,436,436,436,436,436',
+'436,98,116,428,362,304,316,98,227,340,222,316,309,222,340,340,98,304',
+'309,167,167,167,167,167,167,222,167,309,436,226,167,333,167,167,167',
+'167,98,167,167,167,167,167,167,167,394,4,297,309,339,297,334,4,225,339',
+'339,394,66,436,436,436,4,436,436,436,436,436,436,436,436,436,436,167',
+'167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167',
+'167,167,167,167,167,167,167,167,267,267,101,167,167,167,95,167,167,167',
+'167,167,167,167,167,167,167,429,429,429,429,429,429,364,429,68,373,94',
+'429,373,429,429,429,87,364,429,429,429,429,429,429,429,427,427,427,427',
+'427,427,187,427,71,83,217,427,83,427,427,427,217,187,427,427,427,427',
+'427,427,427,217,269,429,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75',
+'75,75,133,53,221,426,53,133,133,427,418,418,291,429,429,429,426,429',
+'429,429,429,429,429,429,429,429,429,137,137,350,220,136,136,136,136',
+'214,214,351,427,427,427,220,427,427,427,427,427,427,427,427,427,427',
+'175,175,175,175,175,175,363,175,215,215,352,175,353,175,175,175,218',
+'363,175,175,175,175,175,175,175,76,76,76,76,76,76,76,76,76,76,76,76',
+'76,76,76,76,76,425,82,82,82,82,82,82,274,82,357,175,425,82,283,82,82',
+'82,82,73,82,82,82,82,82,82,82,72,201,347,347,347,347,209,201,348,348',
+'348,348,365,175,175,175,201,175,175,175,175,175,175,175,175,175,175',
+'82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82',
+'82,82,82,349,349,198,82,82,82,197,82,82,82,82,82,82,82,82,82,82,273',
+'273,273,273,273,273,371,273,135,135,189,273,374,273,273,273,346,346',
+'273,273,273,273,273,273,273,404,404,404,404,404,404,376,404,345,345',
+'79,404,186,404,404,404,79,184,404,404,404,404,404,404,404,79,380,273',
+'47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,344,344,343,343,342',
+'342,138,404,99,99,179,273,273,273,178,273,273,273,273,273,273,273,273',
+'273,273,131,131,131,131,131,131,131,131,131,131,131,404,404,404,177',
+'404,404,404,404,404,404,404,404,404,404,402,402,402,402,402,402,176',
+'402,341,341,395,402,396,402,402,402,134,134,402,402,402,402,402,402',
+'402,275,275,275,275,275,275,102,275,27,403,77,275,25,275,275,275,77',
+'23,275,275,275,275,275,275,275,77,55,402,152,384,191,174,55,191,152',
+'384,191,173,408,412,414,55,416,152,384,191,281,422,172,140,165,141,275',
+'163,149,3,402,402,402,437,402,402,402,402,402,402,402,402,402,402,147',
+'1,,,,,,,,,,275,275,275,,275,275,275,275,275,275,275,275,275,275,360',
+'360,360,360,360,360,,360,,,,360,,360,360,360,,,360,360,360,360,360,360',
+'360,249,249,249,249,249,249,,249,,,,249,,249,249,,,,249,249,249,249',
+'249,249,249,,,360,383,383,383,383,383,383,,383,,,,383,,383,383,,,,383',
+'383,383,383,383,383,383,,,,360,360,360,,360,360,360,360,360,360,360',
+'360,360,360,,,,,,,377,377,377,377,377,377,,377,,377,,377,,377,377,,',
+'249,377,377,377,377,377,377,377,,,,367,367,367,367,367,367,,367,,,,367',
+',367,367,,,383,367,367,367,367,367,367,367,366,366,366,366,366,366,',
+'366,,,,366,,366,366,,,,366,366,366,366,366,366,366,,,367,,,,,,,,,,,',
+',377,,393,393,393,393,393,393,,393,,,366,393,,393,393,,,,393,393,393',
+'393,393,393,393,,367,,,,,,,,356,356,356,356,356,356,,356,,,,356,,356',
+'356,356,356,366,356,356,356,356,356,356,356,330,330,330,330,330,330',
+',330,,,,330,,330,330,,,,330,330,330,330,330,330,330,322,322,322,322',
+'322,322,,322,,393,,322,,322,322,322,,,322,322,322,322,322,322,322,,',
+',356,,,310,310,310,310,310,310,,310,,,,310,356,310,310,,,,310,310,310',
+'310,310,310,310,298,298,298,298,298,298,,298,,298,,298,330,298,298,',
+',,298,298,298,298,298,298,298,,,,,,,,,,,,,322,,,,,282,282,282,282,282',
+'282,,282,,,,282,,282,282,,,,282,282,282,282,282,282,282,,310,,,,,,,',
+',,,,,,,,,,,,,,,,,298,282,282,282,282,282,282,282,282,282,282,282,282',
+'282,282,282,282,282,282,282,282,282,282,282,282,282,282,280,280,280',
+'280,280,280,,280,,,,280,,280,280,282,,,280,280,280,280,280,280,280,146',
+'146,146,146,146,146,,146,,,,146,,146,146,146,,,146,146,146,146,146,146',
+'146,278,278,278,278,278,278,,278,,,,278,,278,278,,,,278,278,278,278',
+'278,278,278,,397,397,397,397,397,397,,397,,,,397,,397,397,,,280,397',
+'397,397,397,397,397,397,,,146,,,405,405,405,405,405,405,,405,,,,405',
+'146,405,405,,,,405,405,405,405,405,405,405,271,271,271,271,271,271,',
+'271,,,,271,278,271,271,,,,271,271,271,271,271,271,271,,266,266,266,266',
+'266,266,,266,,,,266,397,266,266,,,,266,266,266,266,266,266,266,80,80',
+'80,80,80,80,,80,,,,80,,80,80,80,,405,80,80,80,80,80,80,80,406,406,406',
+'406,406,406,406,406,,,,406,,406,406,,,271,406,406,406,406,406,406,406',
+',265,265,265,265,265,265,,265,,,,265,,265,265,,,266,265,265,265,265',
+'265,265,265,,,80,,,85,85,85,85,85,85,,85,,85,,85,80,85,85,,,,85,85,85',
+'85,85,85,85,264,264,264,264,264,264,,264,,,,264,406,264,264,,,,264,264',
+'264,264,264,264,264,,263,263,263,263,263,263,,263,,,,263,265,263,263',
+',,,263,263,263,263,263,263,263,262,262,262,262,262,262,,262,,,,262,',
+'262,262,,,85,262,262,262,262,262,262,262,261,261,261,261,261,261,,261',
+',,,261,,261,261,,,264,261,261,261,261,261,261,261,,260,260,260,260,260',
+'260,,260,,,,260,,260,260,,,263,260,260,260,260,260,260,260,259,259,259',
+'259,259,259,,259,,,,259,,259,259,,,262,259,259,259,259,259,259,259,258',
+'258,258,258,258,258,,258,,,,258,,258,258,,,261,258,258,258,258,258,258',
+'258,,257,257,257,257,257,257,,257,,,,257,,257,257,,,260,257,257,257',
+'257,257,257,257,256,256,256,256,256,256,,256,,,,256,,256,256,,,259,256',
+'256,256,256,256,256,256,255,255,255,255,255,255,,255,,,,255,,255,255',
+',,258,255,255,255,255,255,255,255,,254,254,254,254,254,254,,254,,,,254',
+',254,254,,,257,254,254,254,254,254,254,254,253,253,253,253,253,253,',
+'253,,,,253,,253,253,,,256,253,253,253,253,253,253,253,252,252,252,252',
+'252,252,,252,,,,252,,252,252,,,255,252,252,252,252,252,252,252,,251',
+'251,251,251,251,251,,251,,,,251,,251,251,,,254,251,251,251,251,251,251',
+'251,250,250,250,250,250,250,,250,,,,250,,250,250,,,253,250,250,250,250',
+'250,250,250,389,389,389,389,389,389,,389,,,,389,,389,389,389,,252,389',
+'389,389,389,389,389,389,,248,248,248,248,248,248,,248,,,,248,,248,248',
+',,251,248,248,248,248,248,248,248,,,,,,,,,,,,,,,,,,250,,,,,,,,,,389',
+',,117,117,117,117,117,117,,117,,,,117,389,117,117,,,,117,117,117,117',
+'117,117,117,,236,236,236,236,236,236,,236,,,,236,248,236,236,,,,236',
+'236,236,236,236,236,236,,,,,,,117,117,117,117,117,117,117,117,117,117',
+'117,117,117,117,117,117,117,,,121,121,121,121,121,121,,121,,,,121,,121',
+'121,,,117,121,121,121,121,121,121,121,,122,122,122,122,122,122,,122',
+',,,122,,122,122,,,236,122,122,122,122,122,122,122,123,123,123,123,123',
+'123,,123,,,,123,,123,123,,,,123,123,123,123,123,123,123,124,124,124',
+'124,124,124,,124,,,,124,,124,124,,,121,124,124,124,124,124,124,124,',
+',,,,,,,,,,,233,233,233,233,233,233,122,233,,,,233,,233,233,,,,233,233',
+'233,233,233,233,233,223,223,223,223,223,223,123,223,,,,223,,223,223',
+',,,223,223,223,223,223,223,223,,,,,,,124,233,233,233,233,233,233,233',
+'233,233,233,233,233,233,233,233,233,233,,,231,231,231,231,231,231,,231',
+',,,231,,231,231,,,233,231,231,231,231,231,231,231,224,224,224,224,224',
+'224,224,224,,,,224,,224,224,,,223,224,224,224,224,224,224,224,,,,,,',
+',231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231',
+',,213,213,213,213,213,213,,213,,,,213,,213,213,,,231,213,213,213,213',
+'213,213,213,210,210,210,210,210,210,,210,,,,210,,210,210,,,224,210,210',
+'210,210,210,210,210,180,180,180,180,180,180,,180,,,,180,,180,180,,,',
+'180,180,180,180,180,180,180,,407,407,407,407,407,407,407,407,,,,407',
+',407,407,,,213,407,407,407,407,407,407,407,,180,,,,435,435,435,435,435',
+'435,,435,,,,435,210,435,435,435,435,,435,435,435,435,435,435,435,164',
+'164,164,164,164,164,,164,,,,164,180,164,164,,,,164,164,164,164,164,164',
+'164,,279,279,279,279,279,279,,279,,,,279,407,279,279,,,,279,279,279',
+'279,279,279,279,,,435,,,,,,,,,,,,,,41,435,,,,,,,,,,,,,,,,,,,,,,,,,164',
+',,2,,,,,,,,,,,,,,,,,,,,,,,279,41,41,41,41,41,41,41,41,41,41,41,41,41',
+'41,41,41,41,41,41,41,41,41,41,41,41,41,,,41,2,2,2,2,2,2,2,2,2,2,2,2',
+'2,2,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,294,294,,294,,,294,,,,,,,,,294,,,,',
+',,,,,325,325,,325,,,,,,,,,,,,325,,,,,,,,294,294,294,294,294,294,294',
+'294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294',
+'294,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325',
+'325,325,325,325,325,325,325,325,325,86,,,,,86,,,,,,,,,,,,,,,,,,,,378',
+',,,,,,,,,,,,,,,,,,,,,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86',
+'86,86,86,86,86,86,86,86,86,378,378,378,378,378,378,378,378,378,378,378',
+'378,378,378,378,378,378,378,378,378,378,378,378,378,378,292,7,7,7,7',
+'7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,,,,,,96,,,,,,,,,,,,292,292',
+'292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292',
+'292,292,292,292,292,292,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96',
+'96,96,96,96,96,96,96,96,96,96,202,,,,,,,,,,,,,,,,,,,,,,,,,299,,,,,,',
+',,,,,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202',
+'202,202,202,202,202,202,202,202,202,299,299,299,299,299,299,299,299',
+'299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299',
+'199,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92',
+'92,92,92,,,,,,,,,,,,199,199,199,199,199,199,199,199,199,199,199,199',
+'199,199,199,199,199,199,199,199,199,199,199,199,199,8,8,8,8,8,8,8,8',
+'8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,196,196,196,196,196,196,196,196,196',
+'196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,6,6',
+'6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5',
+'5,5,5,5,5,5,5,5,5,5,5,5,5,5,93,93,93,93,93,93,93,93,93,93,93,93,93,93',
+'93,93,93,93,93,93,93,93,93,93,93,69,69,69,69,69,69,69,69,69,69,69,69',
+'69,69,69,69,69,69,69,69,69,69,69,69,69' ]
+        racc_action_check = arr = ::Array.new(3198, nil)
         idx = 0
         clist.each do |str|
@@ -572,427 +611,475 @@
 
 racc_action_pointer = [
-   nil,   150,   420,   404,   652,  2412,  2762,  2744,   nil,   nil,
-   nil,   nil,   346,   nil,   323,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   337,   nil,    -5,   nil,    -7,   nil,   nil,   nil,
-   nil,   nil,   366,   nil,   nil,   nil,   nil,   nil,  1848,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    18,   nil,
-    23,   162,   188,   nil,   534,    -8,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   232,   227,   nil,   204,  2674,   nil,   233,
-   124,   nil,   387,  2814,   653,   nil,   651,  1303,   nil,   nil,
-   205,   nil,  1363,  2342,   124,    72,   nil,   nil,  2604,  2552,
-    22,   543,  2482,   nil,   533,    21,   nil,   537,   563,   nil,
-   nil,    88,   nil,   nil,   533,   474,   nil,   nil,   nil,   nil,
-   nil,   542,  1866,   nil,     2,   581,  1972,  1995,  2027,  2050,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   275,   322,
-   414,   685,    45,   480,   461,   458,   456,   351,   nil,   nil,
-   nil,  2073,   485,   nil,   477,  1749,   470,   nil,   467,   nil,
-   445,   nil,   235,   nil,   nil,  2534,   411,   409,  2622,   nil,
-   532,  2692,   nil,   nil,   nil,   nil,    74,   nil,   nil,   nil,
-   436,   608,    51,   nil,   655,   435,   nil,   419,   412,   nil,
-   206,   138,   401,  1386,   393,   383,   nil,   nil,   nil,    51,
-   nil,   890,   nil,   nil,   161,   184,   356,   379,   482,   821,
-   922,  1464,  1487,  1570,  1639,  1694,  1717,  1926,  1949,  1593,
-    -2,    21,  1616,    -7,   nil,   506,   nil,     4,   745,   nil,
+   nil,   732,  2528,   716,   182,  3068,  3043,  2752,  2993,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   515,   517,  2177,   518,   519,   488,  2137,   491,   nil,
-   529,   503,   507,  2096,   509,   nil,   nil,  2394,   204,  2271,
-   nil,   nil,   217,  1843,  2464,   nil,   nil,   nil,   nil,   108,
-   nil,   nil,   nil,   nil,   536,   nil,   nil,   nil,   nil,   nil,
-   nil,  1671,   nil,   145,  2253,   184,   nil,  1533,   581,   nil,
-   nil,   586,   nil,   nil,   nil,   273,   224,    91,   105,   144,
-   225,   250,   269,   724,   681,   287,   579,   -20,    -5,    -4,
-    10,   nil,  1510,    72,  1432,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,  1409,  1326,    82,  1280,
-  1257,  1069,   133,   975,   153,   nil,   nil,   155,   nil,   nil,
-   216,   nil,    22,   222,   nil,   235,   945,  2324,   nil,   260,
-   nil,   nil,   234,   nil,   nil,   nil,   867,   106,   nil,   nil,
-   844,   nil,   nil,   nil,   253,   294,   310,   315,   283,   319,
-   nil,   727,   nil,   nil,   nil,   329,   nil,   nil,   nil,   334,
-   nil,   339,   nil,   nil,   nil,   nil,   nil,   nil,   633,   514,
-   333,   310,   296,   nil,   nil,   nil,   nil,   303,   nil,   362,
-   332,   nil,   216,   350,   115,   nil,   nil,   385,  1163,   nil ]
+   nil,   nil,   nil,   624,   nil,   619,   nil,   656,   nil,    38,
+   nil,    40,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,  2499,   nil,   nil,   nil,   nil,   nil,   510,   nil,    78,
+   nil,    37,     3,   322,   nil,   680,   -14,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,    20,   183,   nil,   249,  3118,
+   nil,   278,   429,   421,   nil,   252,   344,   664,   nil,   544,
+  1392,   nil,   419,   285,   nil,  1473,  2701,   266,    28,   nil,
+   nil,   nil,  2932,  3093,   214,   193,  2819,   nil,   138,   576,
+   nil,   200,   654,    22,   nil,   nil,    12,   nil,   nil,    15,
+     1,   nil,   nil,   nil,   nil,   nil,   137,  1959,   nil,   nil,
+    55,  2035,  2061,  2086,  2111,   nil,   nil,   nil,   nil,   nil,
+   nil,   568,   nil,   306,   629,   495,   326,   318,   571,   -20,
+   672,   673,    64,   nil,   nil,   nil,  1235,   724,   nil,   702,
+   nil,    22,   682,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   672,  2431,   669,   nil,   161,   nil,   nil,
+   nil,   nil,   702,   691,   685,   376,   635,   612,   546,   542,
+  2350,   nil,   nil,   nil,   547,   nil,   545,   281,   nil,   507,
+   nil,   684,   nil,   nil,   nil,   nil,  3018,   451,   447,  2968,
+   nil,   440,  2881,   nil,   nil,   nil,   nil,    44,   nil,   410,
+  2325,   nil,    61,  2300,   343,   368,   nil,   286,   381,   nil,
+   348,   322,   147,  2173,  2249,   189,   160,   139,   nil,   nil,
+   nil,  2224,   nil,  2148,   nil,   nil,  1985,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,  1904,   779,
+  1853,  1828,  1802,  1777,  1752,  1726,  1701,  1676,  1650,  1625,
+  1600,  1574,  1549,  1524,  1498,  1443,  1367,   223,   nil,   300,
+   nil,  1341,   nil,   514,   385,   659,   nil,   nil,  1260,  2457,
+  1210,   619,  1132,   379,   nil,   nil,    45,   nil,   nil,   nil,
+   nil,   325,  2794,    -1,  2604,   nil,   nil,   183,  1090,  2906,
+   nil,   nil,   nil,   nil,   107,   nil,   nil,   nil,   nil,   149,
+  1065,   nil,   nil,   nil,   nil,   nil,   137,   nil,    82,   nil,
+   nil,   nil,  1034,   nil,    68,  2629,    23,   nil,    65,   nil,
+  1009,   nil,   nil,   167,   186,   nil,   nil,   nil,   nil,   170,
+   131,   621,   567,   559,   557,   520,   503,   417,   423,   464,
+   334,   326,   350,   351,    14,   nil,   984,   421,   nil,   nil,
+   754,   nil,   129,   376,   256,   451,   908,   883,   nil,   nil,
+   nil,   510,   nil,   260,   520,   nil,   539,   855,  2726,   nil,
+   556,   nil,   nil,   807,   683,   nil,   nil,   nil,   nil,  1878,
+   nil,   nil,   nil,   950,   180,   629,   631,  1286,   nil,   nil,
+   nil,   nil,   634,   653,   539,  1316,  1417,  2376,   687,   nil,
+   nil,   nil,   689,   nil,   693,   nil,   649,   nil,   318,   nil,
+   nil,   nil,   622,   nil,   nil,   412,   323,   281,   128,   256,
+   nil,   nil,   nil,   nil,   nil,  2406,   118,   666,    23,   nil,
+    -2,   nil,   nil,   nil,   nil,   nil,   nil ]
 
 racc_action_default = [
-  -176,  -243,    -1,  -243,  -243,   -70,   -71,   -72,   -80,   -81,
-   -82,   -83,   -84,   -85,   -86,   -87,   -88,   -89,   -90,   -91,
-   -92,   -93,   -96,   -99,  -243,  -116,  -243,  -129,  -134,  -135,
-  -177,  -178,  -243,  -180,  -181,  -184,  -185,  -186,  -243,  -232,
-  -233,  -234,  -235,  -236,  -237,  -238,  -239,   400,  -243,   -76,
-   -78,  -243,  -137,  -139,  -243,  -145,   -73,   -84,   -86,   -74,
-   -75,  -183,  -182,   -98,  -243,  -102,  -115,  -243,  -119,  -243,
-  -128,  -179,  -106,  -108,  -243,   -69,  -243,  -243,  -190,  -191,
-  -136,  -138,  -243,  -243,  -243,  -146,  -147,   -94,  -243,  -243,
-   -84,   -85,  -243,  -117,  -243,  -243,  -130,  -132,  -243,  -107,
-  -109,  -243,  -188,   -77,   -78,    -2,    -3,    -4,    -5,    -6,
-    -7,    -8,  -243,   -10,   -12,   -23,  -243,  -243,  -243,  -243,
-   -29,   -30,   -31,   -32,   -33,   -34,   -35,   -37,   -41,   -44,
-   -47,   -52,   -55,   -57,   -59,   -61,   -63,   -65,   -68,   -79,
-  -170,  -243,  -243,  -240,  -243,  -243,  -243,  -142,  -243,  -144,
-  -149,  -151,  -155,  -140,  -148,  -243,   -84,   -85,  -243,  -100,
-  -243,  -243,  -122,  -121,  -114,  -118,  -243,  -123,  -125,  -126,
-  -243,  -243,  -243,  -187,  -243,  -243,   -11,  -243,  -243,   -67,
-  -156,   -20,  -243,  -243,  -243,  -243,   -18,   -19,   -24,  -243,
-   -25,  -243,   -27,   -28,  -243,  -243,  -243,  -243,  -243,  -243,
-  -243,  -243,  -243,  -243,  -243,  -243,  -243,  -243,  -243,  -243,
-  -243,  -243,  -243,  -243,  -174,  -243,  -241,   -35,  -243,  -192,
-  -193,  -194,  -195,  -196,  -197,  -198,  -199,  -200,  -201,  -202,
-  -203,  -243,  -243,  -243,  -243,  -243,  -240,  -243,  -243,  -213,
-  -243,  -243,  -243,  -243,  -243,  -141,  -143,  -243,  -158,  -243,
-  -153,  -154,  -159,  -243,  -243,  -105,  -104,   -97,  -101,  -243,
-  -110,  -112,  -113,  -120,  -243,  -131,  -133,  -127,  -189,  -242,
-    -9,  -243,  -157,  -158,  -243,  -243,   -21,   -20,  -243,   -16,
-   -17,  -243,   -38,   -39,   -40,   -42,   -43,   -45,   -46,   -48,
-   -49,   -50,   -51,   -53,   -54,   -56,   -58,   -60,   -62,   -64,
-  -243,  -171,  -243,  -243,  -243,  -221,  -222,  -223,  -224,  -225,
-  -226,  -227,  -228,  -229,  -230,  -231,  -243,  -243,  -243,  -243,
-  -243,  -243,  -243,  -243,  -243,  -215,  -216,  -243,  -218,  -219,
-  -243,  -152,  -160,  -243,  -166,  -243,  -243,  -243,  -162,  -243,
-   -95,  -103,  -243,  -124,   -36,   -13,  -243,  -243,   -15,   -26,
-  -243,  -172,  -175,  -173,  -243,  -243,  -243,  -243,  -243,  -243,
-  -210,  -243,  -212,  -214,  -217,  -243,  -161,  -167,  -164,  -243,
-  -168,  -243,  -163,  -111,   -22,   -14,   -66,  -220,  -243,  -243,
-  -243,  -243,  -243,  -211,  -150,  -165,  -169,  -204,  -206,  -243,
-  -243,  -209,  -243,  -243,  -243,  -205,  -207,  -243,  -243,  -208 ]
+  -215,  -269,    -1,  -269,  -269,   -86,   -88,   -90,   -92,   -98,
+   -99,  -100,  -101,  -102,  -103,  -104,  -105,  -106,  -107,  -108,
+  -109,  -110,  -111,  -112,  -113,  -114,  -115,  -118,  -121,  -269,
+  -139,  -269,  -163,  -164,  -165,  -166,  -167,  -168,  -169,  -216,
+  -217,  -269,  -219,  -220,  -223,  -224,  -225,  -269,   447,  -269,
+   -94,   -96,  -269,  -171,  -173,  -269,  -180,   -87,  -112,  -114,
+   -89,   -91,   -93,  -222,  -221,  -120,  -269,  -124,  -138,  -269,
+  -142,  -269,  -155,  -158,  -218,  -130,  -132,  -269,   -85,  -269,
+  -269,  -229,  -269,  -170,  -172,  -269,  -269,  -269,  -181,  -182,
+  -184,  -116,  -269,  -269,  -112,  -113,  -269,  -140,  -269,  -269,
+  -159,  -161,  -269,  -269,  -129,  -131,  -269,  -227,   -95,   -96,
+    -2,    -3,    -4,    -5,    -6,    -7,    -8,  -269,   -10,   -12,
+   -25,  -269,  -269,  -269,  -269,   -31,   -32,   -33,   -34,   -35,
+   -36,   -37,   -39,   -43,   -46,   -49,   -54,   -57,   -59,   -61,
+   -63,   -65,   -67,   -69,   -97,  -209,  -269,  -269,  -265,  -269,
+   -82,  -269,  -269,  -230,  -231,  -232,  -233,  -234,  -235,  -236,
+  -237,  -238,  -239,  -265,  -269,  -269,  -243,  -269,  -245,  -247,
+  -248,  -249,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
+  -269,  -268,   -37,   -84,  -269,  -176,  -269,  -269,  -179,  -186,
+  -188,  -192,  -193,  -174,  -183,  -185,  -269,  -112,  -113,  -269,
+  -122,  -269,  -269,  -145,  -144,  -137,  -141,  -269,  -146,  -148,
+  -269,  -151,  -269,  -269,  -269,  -269,  -226,  -269,  -269,   -11,
+  -269,  -269,  -195,  -269,  -269,  -269,  -269,  -269,   -19,   -20,
+   -26,  -269,   -27,  -269,   -29,   -30,  -269,   -71,   -72,   -73,
+   -74,   -75,   -76,   -77,   -78,   -79,   -80,   -81,  -269,  -269,
+  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
+  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -213,  -269,
+  -266,  -269,  -250,  -269,  -269,  -269,  -244,  -246,  -269,  -269,
+  -269,  -269,  -269,  -269,  -261,  -262,  -269,  -263,  -175,  -177,
+  -178,  -269,  -269,  -197,  -269,  -190,  -191,  -198,  -269,  -269,
+  -128,  -127,  -119,  -123,  -269,  -133,  -135,  -136,  -143,  -269,
+  -269,  -149,  -153,  -160,  -162,  -152,  -269,  -156,  -269,  -228,
+  -267,    -9,  -269,  -196,  -197,  -269,  -269,   -14,  -269,   -23,
+  -269,   -17,   -18,  -269,  -269,   -70,   -40,   -41,   -42,   -44,
+   -45,   -47,   -48,   -50,   -51,   -52,   -53,   -55,   -56,   -58,
+   -60,   -62,   -64,   -66,  -269,  -210,  -269,  -269,   -83,  -240,
+  -269,  -242,  -269,  -269,  -269,  -269,  -269,  -269,  -260,  -264,
+  -194,  -269,  -189,  -199,  -269,  -205,  -269,  -269,  -269,  -201,
+  -269,  -117,  -125,  -269,  -269,  -147,  -150,  -154,  -157,  -269,
+   -38,   -13,   -15,  -269,  -269,   -28,  -269,  -269,  -211,  -214,
+  -212,  -241,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -200,
+  -206,  -203,  -269,  -207,  -269,  -202,  -269,  -134,  -269,   -24,
+   -16,   -68,  -251,  -253,  -254,  -269,  -269,  -269,  -269,  -269,
+  -187,  -204,  -208,  -126,   -21,  -269,  -269,  -269,  -269,  -256,
+  -269,  -258,   -22,  -252,  -255,  -257,  -259 ]
 
 racc_goto_table = [
-    50,     4,   177,   146,    56,    59,    60,   190,   192,   193,
-   148,    86,   139,   138,   260,    80,   167,   188,   138,   158,
-   275,   258,   178,    35,    31,   165,   332,    73,    12,    74,
-    14,     4,   287,   288,    91,   217,    95,   293,   294,   251,
-   304,   154,   219,     2,    85,   295,    92,   285,   286,   296,
-    72,   332,   297,    35,    71,   157,    91,   298,    12,    91,
-    14,    73,    73,    99,   100,   172,    94,   272,   161,   299,
-   102,   276,   104,   278,   103,    63,   214,   138,   155,   177,
-    64,   177,   152,   259,    72,    72,   254,   160,    94,    66,
-   168,    94,   266,    90,   165,   282,   283,   284,   166,   281,
-   265,    73,   300,   182,   331,   213,    30,   138,   248,   289,
-   290,   291,   292,   101,   156,    90,   347,   258,    90,    78,
-   145,     1,   157,   217,    72,   157,   nil,   nil,    91,   nil,
-   318,   nil,   nil,   327,   nil,   nil,   273,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   250,   nil,
-   nil,   nil,   nil,   nil,   160,   nil,   261,   160,   322,   nil,
-    94,   nil,   nil,   nil,   nil,   nil,   nil,   276,   nil,   nil,
-   268,   nil,   344,   138,   339,   nil,   nil,   nil,    73,   nil,
-   nil,   156,   nil,   nil,   156,   nil,   343,    90,   nil,   138,
-   nil,   nil,   nil,   nil,   354,   nil,   373,   nil,   nil,   nil,
-   nil,    72,   nil,   nil,   nil,   248,   355,   356,   nil,   358,
-   359,   217,    80,   217,   104,   nil,   nil,   nil,   360,   nil,
-   362,   157,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   273,   nil,   nil,   nil,   nil,   nil,   374,   352,   138,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   152,   nil,   152,   nil,
-   nil,   217,   nil,   160,   nil,   nil,   nil,   369,   383,   nil,
-   168,   nil,   nil,   nil,   371,   nil,   nil,   nil,   217,   217,
-   389,   390,   138,   152,   nil,   387,   388,   nil,   nil,   nil,
-   156,   nil,   217,   nil,   397,   nil,   376,   nil,   217,   395,
-   nil,   nil,   nil,   nil,   nil,   399,   nil,   nil,   nil,   nil,
+    51,   144,   145,    81,   183,   182,   184,   281,   186,    23,
+   267,    95,   208,    83,   206,   305,   303,   313,   328,   169,
+    25,     4,   199,   230,    57,    60,    61,    62,    75,    89,
+    40,    99,   168,   221,   198,    95,   296,    77,    95,   220,
+   373,   182,   232,   234,   235,    65,    96,   207,    23,    76,
+   304,   366,   343,   344,   345,   346,    75,    75,    90,    25,
+     4,   194,   214,   215,    66,   104,   105,   323,   145,    74,
+   202,   373,   196,   107,    68,   109,    94,    76,    76,   347,
+   348,   339,   340,   183,   182,   274,   341,   342,    98,   108,
+   195,   236,   187,    88,   209,   372,   353,   352,    75,   197,
+    94,   152,   286,    94,   169,   359,    39,   361,   351,   106,
+   350,   201,    98,   349,     2,    98,   303,   277,   167,    76,
+   206,   313,   225,   313,   394,     1,   299,   nil,   nil,   183,
+   182,   311,   183,   182,   314,   406,   407,   nil,   198,   nil,
+   nil,   198,   nil,   nil,    95,   326,   329,   333,   109,   334,
+   336,   337,   338,   220,   nil,   220,   nil,   nil,   335,   nil,
+   nil,   nil,   nil,   nil,   293,   nil,   nil,   nil,   182,   182,
+   182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
+   182,   182,   182,   182,   182,   182,   152,   295,   354,   nil,
+   nil,   nil,   401,   358,   nil,   324,   nil,   306,   417,   nil,
+   362,   363,   364,   197,   nil,   nil,   197,   nil,   nil,    94,
+   nil,   nil,    75,   319,    75,   201,   nil,   nil,   201,   367,
+   380,    98,   nil,   385,   390,   nil,   nil,   nil,   nil,   183,
+   182,   386,   nil,    76,   422,    76,   424,   nil,   nil,   nil,
+   nil,   198,   182,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   329,   418,    83,   nil,   nil,   nil,   nil,   439,
+   nil,   441,   nil,   nil,   nil,   nil,   nil,   293,   443,   nil,
+   445,   nil,   446,   nil,   nil,   nil,   nil,   399,   145,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   324,   412,
+   414,   152,   183,   182,   416,   209,   197,   nil,   nil,   nil,
+   nil,   145,   nil,   nil,   nil,   419,   421,   182,   201,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   425,   426,   428,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   152,   nil,   261 ]
-
-racc_goto_check = [
-    32,    27,     6,    25,    27,    27,    27,    10,    10,    10,
-    57,    55,    33,    24,    45,    56,    51,    12,    24,    39,
-     8,    42,    13,    26,    64,    49,    61,     9,    34,    44,
-    36,    27,    15,    15,    35,    10,    53,    17,    17,    60,
-    79,    55,    70,     2,     9,    18,    48,    14,    14,    19,
-    30,    61,    20,    26,    64,    35,    35,    21,    34,    35,
-    36,     9,     9,    44,    44,    53,    27,    60,    48,    22,
-    32,     6,    32,     6,    31,    38,    33,    24,    40,     6,
-    41,     6,    27,    43,    30,    30,    39,    27,    27,    47,
-    32,    27,    25,    34,    49,    12,    12,    12,    50,    13,
-    54,     9,     6,     9,    59,    62,    63,    24,    55,    16,
-    16,    16,    16,    67,    34,    34,     8,    42,    34,    68,
-    69,     1,    35,    10,    30,    35,   nil,   nil,    35,   nil,
-    70,   nil,   nil,     6,   nil,   nil,    55,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    32,   nil,
-   nil,   nil,   nil,   nil,    27,   nil,    32,    27,    25,   nil,
-    27,   nil,   nil,   nil,   nil,   nil,   nil,     6,   nil,   nil,
-    32,   nil,    12,    24,    25,   nil,   nil,   nil,     9,   nil,
-   nil,    34,   nil,   nil,    34,   nil,    51,    34,   nil,    24,
-   nil,   nil,   nil,   nil,     6,   nil,    45,   nil,   nil,   nil,
-   nil,    30,   nil,   nil,   nil,    55,     6,     6,   nil,     6,
-     6,    10,    56,    10,    32,   nil,   nil,   nil,    70,   nil,
-    70,    35,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-    55,   nil,   nil,   nil,   nil,   nil,     6,    33,    24,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,    27,   nil,    27,   nil,
-   nil,    10,   nil,    27,   nil,   nil,   nil,    25,    70,   nil,
-    32,   nil,   nil,   nil,    57,   nil,   nil,   nil,    10,    10,
-     6,     6,    24,    27,   nil,    70,    70,   nil,   nil,   nil,
-    34,   nil,    10,   nil,     6,   nil,    24,   nil,    10,    70,
-   nil,   nil,   nil,   nil,   nil,    70,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   423,   399,   145,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   306 ]
+
+racc_goto_check = [
+    36,    37,    12,    72,    26,    13,    28,    73,    60,    38,
+    11,    39,    55,    59,    53,    49,    46,    57,     8,    29,
+    40,    30,    43,    15,    30,    30,    30,    30,    33,    58,
+    68,    56,    84,    10,    39,    39,    65,    48,    39,     6,
+    66,    13,    13,    13,    13,    42,    52,    54,    38,     9,
+    47,    75,    18,    18,    18,    18,    33,    33,     9,    40,
+    30,    58,    56,    56,    45,    48,    48,    65,    12,    68,
+    52,    66,    44,    36,    51,    36,    38,     9,     9,    19,
+    19,    16,    16,    26,    13,    28,    17,    17,    30,    35,
+     9,    27,    61,    62,    36,    64,    24,    23,    33,    38,
+    38,    30,     6,    38,    29,    73,    67,    73,    22,    71,
+    21,    30,    30,    20,     2,    30,    46,    84,    83,     9,
+    53,    57,     9,    57,     8,     1,    43,   nil,   nil,    26,
+    13,    28,    26,    13,    28,    75,    75,   nil,    39,   nil,
+   nil,    39,   nil,   nil,    39,     6,    12,    10,    36,    10,
+    15,    15,    15,     6,   nil,     6,   nil,   nil,    12,   nil,
+   nil,   nil,   nil,   nil,    58,   nil,   nil,   nil,    13,    13,
+    13,    13,    13,    13,    13,    13,    13,    13,    13,    13,
+    13,    13,    13,    13,    13,    13,    30,    36,     6,   nil,
+   nil,   nil,    73,    12,   nil,    58,   nil,    36,    49,   nil,
+     6,     6,     6,    38,   nil,   nil,    38,   nil,   nil,    38,
+   nil,   nil,    33,    36,    33,    30,   nil,   nil,    30,    29,
+    12,    30,   nil,    55,    15,   nil,   nil,   nil,   nil,    26,
+    13,    28,   nil,     9,    73,     9,    73,   nil,   nil,   nil,
+   nil,    39,    13,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,    12,    11,    59,   nil,   nil,   nil,   nil,    73,
+   nil,    73,   nil,   nil,   nil,   nil,   nil,    58,    73,   nil,
+    73,   nil,    73,   nil,   nil,   nil,   nil,    37,    12,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,    27,   nil,    32 ]
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    58,    12,
+    60,    30,    26,    13,    28,    36,    38,   nil,   nil,   nil,
+   nil,    12,   nil,   nil,   nil,    12,    26,    13,    30,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,     6,     6,     6,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,    72,    37,    12,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+    36 ]
 
 racc_goto_pointer = [
-   nil,   121,    43,   nil,   nil,   nil,  -110,   nil,  -161,   -11,
-  -110,   nil,   -99,   -90,  -150,  -167,   -92,  -168,  -162,  -159,
-  -157,  -153,  -142,   nil,   -64,   -79,    21,    -1,   nil,   nil,
-    12,    -2,    -4,   -65,    26,   -33,    28,   nil,    53,   -69,
-    -9,    58,  -137,   -77,    -9,  -146,   nil,    65,   -21,   -67,
-     4,   -78,   nil,   -33,   -70,   -44,   -36,   -73,   nil,  -143,
-  -113,  -222,   -36,   104,    22,   nil,   nil,    39,    69,    41,
-  -103,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,  -177 ]
+   nil,   125,   114,   nil,   nil,   nil,   -78,   nil,  -206,     2,
+   -84,  -136,   -78,   -80,   nil,   -98,  -170,  -167,  -203,  -180,
+  -148,  -152,  -155,  -167,  -169,   nil,   -81,   -40,   -79,   -63,
+    19,   nil,   nil,   -19,   nil,    10,    -4,   -79,     7,   -58,
+    18,   nil,    18,   -70,   -19,    37,  -183,  -151,   -10,  -186,
+   nil,    45,   -23,   -82,   -51,   -86,   -40,  -195,   -27,   -39,
+   -78,     6,    37,   nil,  -197,  -155,  -253,   104,    28,   nil,
+   nil,    32,   -48,  -168,   nil,  -231,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,    36,   -50 ]
 
 racc_goto_default = [
-   nil,   nil,   nil,   114,   105,   111,   244,   115,   nil,     7,
-   126,   116,   127,   nil,   128,   129,   130,   131,   132,   133,
-   134,   135,   136,   137,   179,   140,   220,   218,    48,     5,
-     6,    49,    84,   nil,    57,    13,    58,    22,   nil,   nil,
-   nil,   nil,   159,   nil,   180,   nil,    24,   nil,   nil,    93,
-   nil,   nil,    26,   nil,    96,    51,    52,   335,   150,   151,
-   333,   252,   nil,   nil,   nil,    33,    34,   nil,   227,   nil,
-   nil,   221,   222,   223,   224,   225,   226,   228,   229,   nil ]
+   nil,   nil,   nil,   119,   110,   116,   151,   120,   nil,     7,
+   nil,   nil,   150,   131,   121,   132,   133,   134,   135,   136,
+   137,   138,   139,   140,   141,   142,   143,   nil,   nil,    44,
+   191,    49,     5,     6,     8,    50,    87,   268,    58,    24,
+    59,    27,   nil,   nil,   nil,   nil,   200,   nil,   222,   nil,
+    29,   nil,   nil,    97,   nil,   nil,   nil,   100,    52,    53,
+   376,   nil,   nil,   189,   190,   374,   297,   nil,   nil,    42,
+    43,   nil,   154,   170,   153,   155,   156,   157,   158,   159,
+   160,   161,   162,   nil,   nil ]
 
 racc_reduce_table = [
   0, 0, :racc_error,
-  1, 97, :_reduce_none,
-  1, 99, :_reduce_2,
-  1, 99, :_reduce_3,
-  1, 99, :_reduce_4,
-  1, 99, :_reduce_5,
-  1, 99, :_reduce_6,
-  1, 99, :_reduce_7,
-  1, 99, :_reduce_8,
-  3, 99, :_reduce_9,
-  1, 101, :_reduce_10,
-  2, 101, :_reduce_11,
-  1, 103, :_reduce_none,
-  4, 103, :_reduce_none,
-  5, 103, :_reduce_none,
-  4, 103, :_reduce_15,
-  3, 103, :_reduce_16,
-  3, 103, :_reduce_17,
-  2, 103, :_reduce_18,
-  2, 103, :_reduce_19,
-  0, 104, :_reduce_none,
+  1, 98, :_reduce_none,
+  1, 100, :_reduce_2,
+  1, 100, :_reduce_3,
+  1, 100, :_reduce_4,
+  1, 100, :_reduce_5,
+  1, 100, :_reduce_6,
+  1, 100, :_reduce_7,
+  1, 100, :_reduce_8,
+  3, 100, :_reduce_9,
+  1, 102, :_reduce_10,
+  2, 102, :_reduce_11,
   1, 104, :_reduce_none,
+  4, 104, :_reduce_13,
   3, 104, :_reduce_none,
-  1, 106, :_reduce_none,
-  2, 106, :_reduce_24,
-  2, 106, :_reduce_25,
-  4, 106, :_reduce_26,
-  2, 106, :_reduce_27,
-  2, 106, :_reduce_28,
-  1, 107, :_reduce_29,
-  1, 107, :_reduce_30,
-  1, 107, :_reduce_31,
-  1, 107, :_reduce_32,
-  1, 107, :_reduce_33,
-  1, 107, :_reduce_34,
-  1, 108, :_reduce_none,
-  4, 108, :_reduce_36,
+  4, 104, :_reduce_none,
+  5, 104, :_reduce_none,
+  3, 104, :_reduce_17,
+  3, 104, :_reduce_18,
+  2, 104, :_reduce_19,
+  2, 104, :_reduce_20,
+  6, 104, :_reduce_none,
+  7, 104, :_reduce_none,
+  1, 105, :_reduce_none,
+  3, 105, :_reduce_none,
   1, 110, :_reduce_none,
-  3, 110, :_reduce_38,
-  3, 110, :_reduce_39,
-  3, 110, :_reduce_40,
-  1, 111, :_reduce_none,
-  3, 111, :_reduce_42,
-  3, 111, :_reduce_43,
+  2, 110, :_reduce_26,
+  2, 110, :_reduce_27,
+  4, 110, :_reduce_28,
+  2, 110, :_reduce_29,
+  2, 110, :_reduce_30,
+  1, 111, :_reduce_31,
+  1, 111, :_reduce_32,
+  1, 111, :_reduce_33,
+  1, 111, :_reduce_34,
+  1, 111, :_reduce_35,
+  1, 111, :_reduce_36,
   1, 112, :_reduce_none,
-  3, 112, :_reduce_45,
-  3, 112, :_reduce_46,
+  4, 112, :_reduce_38,
   1, 113, :_reduce_none,
-  3, 113, :_reduce_48,
-  3, 113, :_reduce_49,
-  3, 113, :_reduce_50,
-  3, 113, :_reduce_51,
+  3, 113, :_reduce_40,
+  3, 113, :_reduce_41,
+  3, 113, :_reduce_42,
   1, 114, :_reduce_none,
-  3, 114, :_reduce_53,
-  3, 114, :_reduce_54,
+  3, 114, :_reduce_44,
+  3, 114, :_reduce_45,
   1, 115, :_reduce_none,
-  3, 115, :_reduce_56,
+  3, 115, :_reduce_47,
+  3, 115, :_reduce_48,
   1, 116, :_reduce_none,
-  3, 116, :_reduce_58,
+  3, 116, :_reduce_50,
+  3, 116, :_reduce_51,
+  3, 116, :_reduce_52,
+  3, 116, :_reduce_53,
   1, 117, :_reduce_none,
-  3, 117, :_reduce_60,
+  3, 117, :_reduce_55,
+  3, 117, :_reduce_56,
   1, 118, :_reduce_none,
-  3, 118, :_reduce_62,
+  3, 118, :_reduce_58,
   1, 119, :_reduce_none,
-  3, 119, :_reduce_64,
+  3, 119, :_reduce_60,
   1, 120, :_reduce_none,
-  5, 120, :_reduce_66,
-  1, 102, :_reduce_67,
-  1, 121, :_reduce_68,
-  3, 122, :_reduce_none,
-  1, 123, :_reduce_70,
+  3, 120, :_reduce_62,
+  1, 121, :_reduce_none,
+  3, 121, :_reduce_64,
+  1, 122, :_reduce_none,
+  3, 122, :_reduce_66,
   1, 123, :_reduce_none,
-  1, 123, :_reduce_72,
-  2, 123, :_reduce_73,
-  2, 123, :_reduce_74,
-  2, 123, :_reduce_75,
-  1, 124, :_reduce_76,
-  3, 124, :_reduce_77,
+  5, 123, :_reduce_68,
+  1, 109, :_reduce_none,
+  3, 109, :_reduce_none,
+  1, 124, :_reduce_none,
+  1, 124, :_reduce_none,
+  1, 124, :_reduce_none,
+  1, 124, :_reduce_none,
+  1, 124, :_reduce_none,
+  1, 124, :_reduce_none,
+  1, 124, :_reduce_none,
+  1, 124, :_reduce_none,
+  1, 124, :_reduce_none,
+  1, 124, :_reduce_none,
+  1, 124, :_reduce_none,
+  1, 103, :_reduce_82,
+  3, 103, :_reduce_83,
+  1, 125, :_reduce_84,
+  3, 126, :_reduce_none,
+  1, 127, :_reduce_86,
+  2, 127, :_reduce_87,
   1, 127, :_reduce_none,
-  3, 127, :_reduce_79,
-  1, 126, :_reduce_80,
-  1, 126, :_reduce_81,
-  1, 126, :_reduce_82,
-  1, 126, :_reduce_83,
-  1, 126, :_reduce_84,
-  1, 126, :_reduce_85,
-  1, 126, :_reduce_86,
-  1, 126, :_reduce_87,
-  1, 126, :_reduce_88,
-  1, 126, :_reduce_89,
-  1, 126, :_reduce_90,
-  1, 126, :_reduce_91,
-  1, 126, :_reduce_92,
-  1, 126, :_reduce_93,
-  0, 136, :_reduce_94,
-  6, 130, :_reduce_95,
-  0, 137, :_reduce_96,
-  5, 130, :_reduce_97,
-  2, 130, :_reduce_98,
-  1, 133, :_reduce_99,
-  1, 135, :_reduce_none,
-  2, 135, :_reduce_none,
-  1, 134, :_reduce_102,
-  3, 138, :_reduce_103,
-  2, 138, :_reduce_none,
-  2, 138, :_reduce_none,
+  2, 127, :_reduce_89,
+  1, 127, :_reduce_90,
+  2, 127, :_reduce_91,
+  1, 127, :_reduce_none,
+  2, 127, :_reduce_none,
+  1, 128, :_reduce_94,
+  3, 128, :_reduce_95,
+  1, 132, :_reduce_none,
+  3, 132, :_reduce_97,
+  1, 129, :_reduce_none,
+  1, 129, :_reduce_none,
+  1, 129, :_reduce_none,
+  1, 129, :_reduce_none,
+  1, 130, :_reduce_102,
+  1, 130, :_reduce_103,
+  1, 130, :_reduce_104,
+  1, 130, :_reduce_105,
+  1, 130, :_reduce_106,
+  1, 130, :_reduce_107,
+  1, 130, :_reduce_108,
+  1, 130, :_reduce_109,
+  1, 130, :_reduce_110,
+  1, 130, :_reduce_111,
+  1, 130, :_reduce_112,
+  1, 130, :_reduce_113,
+  1, 130, :_reduce_114,
+  1, 130, :_reduce_115,
+  0, 141, :_reduce_116,
+  6, 135, :_reduce_117,
+  0, 142, :_reduce_118,
+  5, 135, :_reduce_119,
+  2, 135, :_reduce_120,
+  1, 138, :_reduce_121,
   1, 140, :_reduce_none,
-  2, 140, :_reduce_107,
-  1, 140, :_reduce_108,
-  2, 140, :_reduce_109,
-  1, 139, :_reduce_110,
-  3, 139, :_reduce_111,
-  1, 141, :_reduce_none,
-  5, 131, :_reduce_none,
-  4, 131, :_reduce_none,
-  2, 131, :_reduce_none,
-  1, 142, :_reduce_116,
-  1, 144, :_reduce_none,
-  2, 144, :_reduce_none,
-  1, 143, :_reduce_none,
-  3, 145, :_reduce_none,
-  2, 145, :_reduce_none,
-  2, 145, :_reduce_none,
+  2, 140, :_reduce_none,
+  1, 139, :_reduce_124,
+  3, 143, :_reduce_125,
+  5, 143, :_reduce_126,
+  2, 143, :_reduce_none,
+  2, 143, :_reduce_none,
+  2, 145, :_reduce_129,
+  1, 145, :_reduce_none,
+  2, 145, :_reduce_131,
+  1, 145, :_reduce_132,
+  1, 144, :_reduce_133,
+  3, 144, :_reduce_134,
   1, 146, :_reduce_none,
-  3, 146, :_reduce_none,
-  1, 147, :_reduce_none,
-  4, 132, :_reduce_none,
-  5, 132, :_reduce_none,
-  2, 132, :_reduce_none,
-  1, 148, :_reduce_129,
+  5, 136, :_reduce_none,
+  4, 136, :_reduce_none,
+  2, 136, :_reduce_none,
+  1, 147, :_reduce_139,
   1, 149, :_reduce_none,
-  3, 149, :_reduce_none,
-  1, 150, :_reduce_none,
+  2, 149, :_reduce_none,
+  1, 148, :_reduce_none,
   3, 150, :_reduce_none,
-  1, 105, :_reduce_134,
-  1, 105, :_reduce_135,
-  2, 128, :_reduce_136,
-  1, 128, :_reduce_none,
-  2, 128, :_reduce_138,
-  1, 152, :_reduce_139,
-  3, 152, :_reduce_140,
-  4, 152, :_reduce_141,
-  3, 152, :_reduce_142,
-  4, 152, :_reduce_143,
-  3, 152, :_reduce_144,
-  1, 151, :_reduce_145,
-  2, 151, :_reduce_146,
-  2, 151, :_reduce_147,
-  3, 151, :_reduce_148,
+  2, 150, :_reduce_none,
+  2, 150, :_reduce_none,
+  1, 151, :_reduce_none,
+  3, 151, :_reduce_none,
+  1, 152, :_reduce_none,
+  2, 152, :_reduce_none,
+  3, 152, :_reduce_none,
+  4, 137, :_reduce_none,
+  5, 137, :_reduce_none,
+  5, 137, :_reduce_none,
+  6, 137, :_reduce_none,
+  2, 137, :_reduce_none,
+  5, 137, :_reduce_none,
+  6, 137, :_reduce_none,
+  2, 137, :_reduce_none,
   1, 153, :_reduce_none,
-  5, 153, :_reduce_none,
+  3, 153, :_reduce_none,
   1, 154, :_reduce_none,
   3, 154, :_reduce_none,
-  2, 155, :_reduce_none,
-  2, 155, :_reduce_none,
-  1, 155, :_reduce_none,
-  1, 109, :_reduce_none,
-  2, 109, :_reduce_none,
-  1, 156, :_reduce_none,
-  1, 156, :_reduce_none,
-  2, 156, :_reduce_none,
-  3, 157, :_reduce_none,
-  2, 157, :_reduce_none,
-  3, 157, :_reduce_none,
-  3, 157, :_reduce_none,
-  4, 157, :_reduce_none,
-  2, 157, :_reduce_166,
-  3, 157, :_reduce_none,
-  3, 157, :_reduce_168,
-  4, 157, :_reduce_none,
-  1, 129, :_reduce_170,
-  3, 129, :_reduce_171,
-  4, 129, :_reduce_172,
-  4, 129, :_reduce_173,
-  1, 158, :_reduce_174,
-  3, 158, :_reduce_175,
-  0, 98, :_reduce_none,
-  2, 98, :_reduce_none,
+  1, 106, :_reduce_163,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_165,
+  1, 131, :_reduce_none,
+  1, 131, :_reduce_none,
+  1, 131, :_reduce_none,
+  1, 131, :_reduce_none,
+  2, 133, :_reduce_170,
+  1, 133, :_reduce_none,
+  2, 133, :_reduce_172,
+  1, 156, :_reduce_173,
+  3, 156, :_reduce_174,
+  4, 156, :_reduce_175,
+  3, 156, :_reduce_176,
+  4, 156, :_reduce_177,
+  4, 156, :_reduce_none,
+  3, 156, :_reduce_179,
+  1, 155, :_reduce_180,
+  2, 155, :_reduce_181,
+  2, 155, :_reduce_182,
+  3, 155, :_reduce_183,
   1, 159, :_reduce_none,
   2, 159, :_reduce_none,
+  1, 157, :_reduce_none,
+  5, 157, :_reduce_none,
   1, 160, :_reduce_none,
-  1, 160, :_reduce_none,
-  2, 160, :_reduce_none,
-  2, 160, :_reduce_none,
-  1, 160, :_reduce_none,
-  1, 160, :_reduce_none,
-  1, 160, :_reduce_none,
-  4, 161, :_reduce_187,
-  1, 163, :_reduce_188,
-  3, 163, :_reduce_189,
-  3, 162, :_reduce_none,
-  0, 165, :_reduce_none,
+  3, 160, :_reduce_none,
+  2, 161, :_reduce_none,
+  2, 161, :_reduce_none,
+  1, 161, :_reduce_none,
+  1, 158, :_reduce_none,
+  3, 158, :_reduce_none,
+  1, 107, :_reduce_none,
+  2, 107, :_reduce_none,
+  1, 162, :_reduce_none,
+  1, 162, :_reduce_none,
+  2, 162, :_reduce_none,
+  3, 163, :_reduce_none,
+  2, 163, :_reduce_none,
+  3, 163, :_reduce_none,
+  3, 163, :_reduce_none,
+  4, 163, :_reduce_none,
+  2, 163, :_reduce_205,
+  3, 163, :_reduce_none,
+  3, 163, :_reduce_207,
+  4, 163, :_reduce_none,
+  1, 134, :_reduce_209,
+  3, 134, :_reduce_210,
+  4, 134, :_reduce_211,
+  4, 134, :_reduce_212,
+  1, 108, :_reduce_213,
+  3, 108, :_reduce_214,
+  0, 99, :_reduce_none,
+  2, 99, :_reduce_none,
+  1, 164, :_reduce_none,
+  2, 164, :_reduce_none,
+  1, 165, :_reduce_none,
+  1, 165, :_reduce_none,
   2, 165, :_reduce_none,
-  1, 166, :_reduce_none,
-  1, 166, :_reduce_none,
-  1, 166, :_reduce_none,
-  1, 166, :_reduce_none,
-  1, 166, :_reduce_none,
-  1, 166, :_reduce_none,
-  1, 166, :_reduce_none,
-  1, 166, :_reduce_none,
-  1, 166, :_reduce_none,
-  1, 166, :_reduce_none,
-  1, 166, :_reduce_none,
-  5, 167, :_reduce_none,
-  7, 167, :_reduce_none,
-  5, 168, :_reduce_none,
-  7, 169, :_reduce_none,
-  9, 170, :_reduce_none,
-  5, 171, :_reduce_none,
-  3, 172, :_reduce_none,
-  4, 172, :_reduce_none,
-  3, 172, :_reduce_none,
-  3, 164, :_reduce_none,
-  3, 173, :_reduce_none,
-  2, 173, :_reduce_none,
-  2, 173, :_reduce_none,
-  3, 173, :_reduce_none,
-  2, 173, :_reduce_none,
-  2, 174, :_reduce_none,
-  4, 174, :_reduce_none,
-  1, 175, :_reduce_none,
-  1, 175, :_reduce_none,
-  1, 175, :_reduce_none,
-  1, 175, :_reduce_none,
-  1, 175, :_reduce_none,
-  1, 175, :_reduce_none,
-  1, 175, :_reduce_none,
-  1, 175, :_reduce_none,
-  1, 175, :_reduce_none,
-  1, 175, :_reduce_none,
-  1, 175, :_reduce_none,
-  1, 125, :_reduce_none,
-  1, 125, :_reduce_none,
-  1, 125, :_reduce_none,
-  1, 125, :_reduce_none,
-  1, 125, :_reduce_none,
-  1, 125, :_reduce_none,
-  1, 125, :_reduce_none,
-  1, 125, :_reduce_none,
-  1, 100, :_reduce_240,
-  2, 100, :_reduce_241,
-  3, 100, :_reduce_242 ]
-
-racc_reduce_n = 243
-
-racc_shift_n = 400
+  2, 165, :_reduce_none,
+  1, 165, :_reduce_none,
+  1, 165, :_reduce_none,
+  1, 165, :_reduce_none,
+  4, 166, :_reduce_226,
+  1, 168, :_reduce_227,
+  3, 168, :_reduce_228,
+  3, 167, :_reduce_none,
+  1, 170, :_reduce_none,
+  1, 170, :_reduce_none,
+  1, 170, :_reduce_none,
+  1, 170, :_reduce_none,
+  1, 170, :_reduce_none,
+  1, 170, :_reduce_none,
+  1, 170, :_reduce_none,
+  1, 170, :_reduce_none,
+  1, 170, :_reduce_none,
+  1, 170, :_reduce_none,
+  3, 171, :_reduce_none,
+  4, 171, :_reduce_none,
+  3, 171, :_reduce_none,
+  2, 169, :_reduce_none,
+  3, 169, :_reduce_none,
+  1, 180, :_reduce_none,
+  2, 180, :_reduce_none,
+  1, 181, :_reduce_none,
+  1, 181, :_reduce_none,
+  1, 172, :_reduce_none,
+  2, 172, :_reduce_none,
+  5, 173, :_reduce_none,
+  7, 173, :_reduce_none,
+  5, 177, :_reduce_none,
+  5, 174, :_reduce_none,
+  7, 175, :_reduce_none,
+  6, 176, :_reduce_none,
+  7, 176, :_reduce_none,
+  6, 176, :_reduce_none,
+  7, 176, :_reduce_none,
+  3, 178, :_reduce_none,
+  2, 178, :_reduce_none,
+  2, 178, :_reduce_none,
+  2, 178, :_reduce_none,
+  3, 178, :_reduce_none,
+  1, 101, :_reduce_265,
+  2, 101, :_reduce_266,
+  3, 101, :_reduce_267,
+  1, 179, :_reduce_268 ]
+
+racc_reduce_n = 269
+
+racc_shift_n = 447
 
 racc_token_table = {
@@ -1014,85 +1101,86 @@
   "++" => 15,
   "--" => 16,
-  "," => 17,
-  :SIZEOF => 18,
-  "&" => 19,
-  "*" => 20,
-  "+" => 21,
-  "-" => 22,
-  "~" => 23,
-  "!" => 24,
-  "/" => 25,
-  "%" => 26,
-  "<<" => 27,
-  ">>" => 28,
-  "<" => 29,
-  ">" => 30,
-  "<=" => 31,
-  ">=" => 32,
-  "==" => 33,
-  "!=" => 34,
-  "^" => 35,
-  "|" => 36,
-  "&&" => 37,
-  "||" => 38,
-  "?" => 39,
-  ":" => 40,
-  ";" => 41,
-  "=" => 42,
-  :VOID => 43,
-  :FLOAT => 44,
-  :DOUBLE => 45,
-  :BOOL => 46,
-  :TYPE_NAME => 47,
-  :CHAR => 48,
-  :SHORT => 49,
-  :INT => 50,
-  :LONG => 51,
-  :SIGNED => 52,
-  :UNSIGNED => 53,
-  "{" => 54,
-  "}" => 55,
-  :STRUCT => 56,
-  :UNION => 57,
-  :ENUM => 58,
-  :CONST => 59,
-  :VOLATILE => 60,
-  :C_EXP => 61,
-  :EXTENSION => 62,
-  :TYPEDEF => 63,
-  :IF => 64,
-  :ELSE => 65,
-  :WHILE => 66,
-  :DO => 67,
-  :FOR => 68,
-  :SWITCH => 69,
-  :infunc_statment => 70,
-  :CASE => 71,
-  :DEFAULT => 72,
-  :GOTO => 73,
-  :CONTINUE => 74,
-  :BREAK => 75,
-  :RETURN => 76,
-  "+=" => 77,
-  "-=" => 78,
-  "*=" => 79,
-  "/=" => 80,
-  "%=" => 81,
-  "<<=" => 82,
-  ">>=" => 83,
-  "&=" => 84,
-  "|=" => 85,
-  "^=" => 86,
-  :__INLINE__ => 87,
-  :INLINE => 88,
-  :__INLINE => 89,
-  :CINLINE => 90,
-  :EXTERN => 91,
-  :STATIC => 92,
-  :AUTO => 93,
-  :REGISTER => 94,
-  "::" => 95 }
-
-racc_nt_base = 96
+  "{" => 17,
+  "}" => 18,
+  "," => 19,
+  :SIZEOF => 20,
+  "&" => 21,
+  "*" => 22,
+  "+" => 23,
+  "-" => 24,
+  "~" => 25,
+  "!" => 26,
+  "/" => 27,
+  "%" => 28,
+  "<<" => 29,
+  ">>" => 30,
+  "<" => 31,
+  ">" => 32,
+  "<=" => 33,
+  ">=" => 34,
+  "==" => 35,
+  "!=" => 36,
+  "^" => 37,
+  "|" => 38,
+  "&&" => 39,
+  "||" => 40,
+  "?" => 41,
+  ":" => 42,
+  "=" => 43,
+  "+=" => 44,
+  "-=" => 45,
+  "*=" => 46,
+  "/=" => 47,
+  "%=" => 48,
+  "<<=" => 49,
+  ">>=" => 50,
+  "&=" => 51,
+  "|=" => 52,
+  "^=" => 53,
+  ";" => 54,
+  :EXTERN => 55,
+  :STATIC => 56,
+  :AUTO => 57,
+  :REGISTER => 58,
+  :VOID => 59,
+  :CHAR => 60,
+  :SHORT => 61,
+  :INT => 62,
+  :LONG => 63,
+  :FLOAT => 64,
+  :DOUBLE => 65,
+  :SIGNED => 66,
+  :UNSIGNED => 67,
+  :BOOL => 68,
+  :TYPE_NAME => 69,
+  :STRUCT => 70,
+  :UNION => 71,
+  :ENUM => 72,
+  :CONST => 73,
+  :RESTRICT => 74,
+  :VOLATILE => 75,
+  :__INLINE__ => 76,
+  :INLINE => 77,
+  :__INLINE => 78,
+  :CINLINE => 79,
+  :C_EXP => 80,
+  :EXTENSION => 81,
+  :TYPEDEF => 82,
+  :CASE => 83,
+  :DEFAULT => 84,
+  :IF => 85,
+  :ELSE => 86,
+  :SWITCH => 87,
+  :WHILE => 88,
+  :DO => 89,
+  :FOR => 90,
+  :GOTO => 91,
+  :CONTINUE => 92,
+  :BREAK => 93,
+  :RETURN => 94,
+  "::" => 95,
+  :_ASM => 96 }
+
+racc_nt_base = 97
 
 racc_use_result_var = true
@@ -1132,4 +1220,6 @@
   "\"++\"",
   "\"--\"",
+  "\"{\"",
+  "\"}\"",
   "\",\"",
   "SIZEOF",
@@ -1156,40 +1246,5 @@
   "\"?\"",
   "\":\"",
-  "\";\"",
   "\"=\"",
-  "VOID",
-  "FLOAT",
-  "DOUBLE",
-  "BOOL",
-  "TYPE_NAME",
-  "CHAR",
-  "SHORT",
-  "INT",
-  "LONG",
-  "SIGNED",
-  "UNSIGNED",
-  "\"{\"",
-  "\"}\"",
-  "STRUCT",
-  "UNION",
-  "ENUM",
-  "CONST",
-  "VOLATILE",
-  "C_EXP",
-  "EXTENSION",
-  "TYPEDEF",
-  "IF",
-  "ELSE",
-  "WHILE",
-  "DO",
-  "FOR",
-  "SWITCH",
-  "infunc_statment",
-  "CASE",
-  "DEFAULT",
-  "GOTO",
-  "CONTINUE",
-  "BREAK",
-  "RETURN",
   "\"+=\"",
   "\"-=\"",
@@ -1202,13 +1257,47 @@
   "\"|=\"",
   "\"^=\"",
+  "\";\"",
+  "EXTERN",
+  "STATIC",
+  "AUTO",
+  "REGISTER",
+  "VOID",
+  "CHAR",
+  "SHORT",
+  "INT",
+  "LONG",
+  "FLOAT",
+  "DOUBLE",
+  "SIGNED",
+  "UNSIGNED",
+  "BOOL",
+  "TYPE_NAME",
+  "STRUCT",
+  "UNION",
+  "ENUM",
+  "CONST",
+  "RESTRICT",
+  "VOLATILE",
   "__INLINE__",
   "INLINE",
   "__INLINE",
   "CINLINE",
-  "EXTERN",
-  "STATIC",
-  "AUTO",
-  "REGISTER",
+  "C_EXP",
+  "EXTENSION",
+  "TYPEDEF",
+  "CASE",
+  "DEFAULT",
+  "IF",
+  "ELSE",
+  "SWITCH",
+  "WHILE",
+  "DO",
+  "FOR",
+  "GOTO",
+  "CONTINUE",
+  "BREAK",
+  "RETURN",
   "\"::\"",
+  "_ASM",
   "$start",
   "all",
@@ -1219,10 +1308,12 @@
   "expression",
   "postfix_expression",
-  "argument_list",
+  "argument_expression_list",
   "type_qualifier",
+  "type_name",
+  "initializer_list",
+  "assignment_expression",
   "unary_expression",
   "unary_operator",
   "cast_expression",
-  "type_name",
   "multiplicative_expression",
   "additive_expression",
@@ -1236,10 +1327,12 @@
   "logical_or_expression",
   "conditional_expression",
+  "assignment_operator",
   "constant_expression",
   "declaration",
   "declaration_specifiers",
   "init_declarator_list",
-  "storage_class",
+  "storage_class_specifier",
   "type_specifier",
+  "function_specifier",
   "init_declarator",
   "declarator",
@@ -1255,5 +1348,5 @@
   "struct_declaration",
   "struct_declarator_list",
-  "type_specifier_qualifier_list",
+  "specifier_qualifier_list",
   "struct_declarator",
   "union_term",
@@ -1263,5 +1356,4 @@
   "union_declarator_list",
   "union_declarator",
-  "enum_type",
   "enumerator_list",
   "enumerator",
@@ -1269,17 +1361,19 @@
   "direct_declarator",
   "parameter_type_list",
+  "identifier_list",
+  "type_qualifier_list",
   "parameter_list",
   "parameter_declaration",
   "abstract_declarator",
   "direct_abstract_declarator",
-  "initializer_list",
   "extension_statement",
-  "statement",
+  "cdl_statement",
   "typedef",
   "func_def",
   "declarator_list",
-  "compoundstatement",
-  "infunc_statement_list",
-  "infunc_statement",
+  "compound_statement",
+  "statement",
+  "labeled_statement",
+  "expression_statement",
   "ifstatement",
   "whilestatement",
@@ -1287,8 +1381,8 @@
   "forstatement",
   "switchstatement",
-  "labelstatement",
-  "gotostatement",
-  "expressionstatement",
-  "assignment_operator" ]
+  "jump_statement",
+  "asm_statement",
+  "block_item_list",
+  "block_item" ]
 
 Racc_debug_parser = false
@@ -1300,5 +1394,5 @@
 # reduce 1 omitted
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 52)
+module_eval(<<'.,.,', 'C_parser.y.rb', 57)
   def _reduce_2(val, _values, result)
      result = [ :IDENTIFIER, val[0] ] 
@@ -1307,5 +1401,5 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 60)
+module_eval(<<'.,.,', 'C_parser.y.rb', 65)
   def _reduce_3(val, _values, result)
      result = [ :INTEGER_CONSTANT, val[0] ] 
@@ -1314,5 +1408,5 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 62)
+module_eval(<<'.,.,', 'C_parser.y.rb', 67)
   def _reduce_4(val, _values, result)
      result = [ :FLOATING_CONSTANT, val[0] ] 
@@ -1321,5 +1415,5 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 64)
+module_eval(<<'.,.,', 'C_parser.y.rb', 69)
   def _reduce_5(val, _values, result)
      result = [ :OCTAL_CONSTANT, val[0] ] 
@@ -1328,5 +1422,5 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 66)
+module_eval(<<'.,.,', 'C_parser.y.rb', 71)
   def _reduce_6(val, _values, result)
      result = [ :HEX_CONSTANT, val[0] ] 
@@ -1335,5 +1429,5 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 68)
+module_eval(<<'.,.,', 'C_parser.y.rb', 73)
   def _reduce_7(val, _values, result)
      result = [ :CHARACTER_LITERAL, val[0] ] 
@@ -1342,5 +1436,5 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 70)
+module_eval(<<'.,.,', 'C_parser.y.rb', 75)
   def _reduce_8(val, _values, result)
      result = [ :STRING_LITERAL_LIST, val[0] ] 
@@ -1349,5 +1443,5 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 72)
+module_eval(<<'.,.,', 'C_parser.y.rb', 77)
   def _reduce_9(val, _values, result)
      result = [ :PARENTHESES, val[1].get_elements ] 
@@ -1356,5 +1450,5 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 76)
+module_eval(<<'.,.,', 'C_parser.y.rb', 81)
   def _reduce_10(val, _values, result)
      result = [val[0]] 
@@ -1363,5 +1457,5 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 78)
+module_eval(<<'.,.,', 'C_parser.y.rb', 83)
   def _reduce_11(val, _values, result)
      result << val[1] 
@@ -1372,17 +1466,19 @@
 # reduce 12 omitted
 
-# reduce 13 omitted
+module_eval(<<'.,.,', 'C_parser.y.rb', 89)
+  def _reduce_13(val, _values, result)
+     result = [ :OP_SUBSC, val[0], val[2] ] 
+    result
+  end
+.,.,
 
 # reduce 14 omitted
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 86)
-  def _reduce_15(val, _values, result)
-     result = [ :OP_SUBSC, val[0], val[2] ] 
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 88)
-  def _reduce_16(val, _values, result)
+# reduce 15 omitted
+
+# reduce 16 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 94)
+  def _reduce_17(val, _values, result)
      result = [ :OP_DOT, val[0], val[2] ] 
     result
@@ -1390,6 +1486,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 90)
-  def _reduce_17(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 96)
+  def _reduce_18(val, _values, result)
      result = [ :OP_REF, val[0], val[2] ] 
     result
@@ -1397,12 +1493,5 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 91)
-  def _reduce_18(val, _values, result)
-     result = val[0] 
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 92)
+module_eval(<<'.,.,', 'C_parser.y.rb', 97)
   def _reduce_19(val, _values, result)
      result = val[0] 
@@ -1411,5 +1500,10 @@
 .,.,
 
-# reduce 20 omitted
+module_eval(<<'.,.,', 'C_parser.y.rb', 98)
+  def _reduce_20(val, _values, result)
+     result = val[0] 
+    result
+  end
+.,.,
 
 # reduce 21 omitted
@@ -1419,6 +1513,10 @@
 # reduce 23 omitted
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 104)
-  def _reduce_24(val, _values, result)
+# reduce 24 omitted
+
+# reduce 25 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 111)
+  def _reduce_26(val, _values, result)
      result = [ val[0], val[1] ] 
     result
@@ -1426,6 +1524,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 106)
-  def _reduce_25(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 113)
+  def _reduce_27(val, _values, result)
      result = [ :OP_SIZEOF_EXPR, val[1] ] 
     result
@@ -1433,6 +1531,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 108)
-  def _reduce_26(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 115)
+  def _reduce_28(val, _values, result)
      result = [ :OP_SIZEOF_TYPE, val[1] ] 
     result
@@ -1440,6 +1538,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 109)
-  def _reduce_27(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 116)
+  def _reduce_29(val, _values, result)
      result = val[1] 
     result
@@ -1447,6 +1545,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 110)
-  def _reduce_28(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 117)
+  def _reduce_30(val, _values, result)
      result = val[1] 
     result
@@ -1454,6 +1552,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 113)
-  def _reduce_29(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 120)
+  def _reduce_31(val, _values, result)
      result = :OP_U_AMP 
     result
@@ -1461,6 +1559,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 114)
-  def _reduce_30(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 121)
+  def _reduce_32(val, _values, result)
      result = :OP_U_ASTER 
     result
@@ -1468,6 +1566,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 115)
-  def _reduce_31(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 122)
+  def _reduce_33(val, _values, result)
      result = :OP_U_PLUS 
     result
@@ -1475,6 +1573,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 116)
-  def _reduce_32(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 123)
+  def _reduce_34(val, _values, result)
      result = :OP_U_MINUS 
     result
@@ -1482,6 +1580,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 117)
-  def _reduce_33(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 124)
+  def _reduce_35(val, _values, result)
      result = :OP_U_TILDE 
     result
@@ -1489,6 +1587,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 118)
-  def _reduce_34(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 125)
+  def _reduce_36(val, _values, result)
      result = :OP_U_EXCLAM 
     result
@@ -1496,8 +1594,8 @@
 .,.,
 
-# reduce 35 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 123)
-  def _reduce_36(val, _values, result)
+# reduce 37 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 130)
+  def _reduce_38(val, _values, result)
       result = [ :CAST, val[1], val[3] ] 
     result
@@ -1505,8 +1603,8 @@
 .,.,
 
-# reduce 37 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 128)
-  def _reduce_38(val, _values, result)
+# reduce 39 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 135)
+  def _reduce_40(val, _values, result)
      result = [ :OP_MULT, val[0], val[2] ]  
     result
@@ -1514,6 +1612,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 130)
-  def _reduce_39(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 137)
+  def _reduce_41(val, _values, result)
      result = [ :OP_DIV, val[0], val[2] ]  
     result
@@ -1521,6 +1619,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 132)
-  def _reduce_40(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 139)
+  def _reduce_42(val, _values, result)
      result = [ :OP_REMAIN, val[0], val[2] ]  
     result
@@ -1528,8 +1626,8 @@
 .,.,
 
-# reduce 41 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 137)
-  def _reduce_42(val, _values, result)
+# reduce 43 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 144)
+  def _reduce_44(val, _values, result)
      result = [ :OP_ADD, val[0], val[2] ]  
     result
@@ -1537,6 +1635,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 139)
-  def _reduce_43(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 146)
+  def _reduce_45(val, _values, result)
      result = [ :OP_SUB, val[0], val[2] ]  
     result
@@ -1544,8 +1642,8 @@
 .,.,
 
-# reduce 44 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 144)
-  def _reduce_45(val, _values, result)
+# reduce 46 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 151)
+  def _reduce_47(val, _values, result)
      result = [ :OP_LSFT, val[0], val[2] ]  
     result
@@ -1553,6 +1651,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 146)
-  def _reduce_46(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 153)
+  def _reduce_48(val, _values, result)
      result = [ :OP_RSFT, val[0], val[2] ]  
     result
@@ -1560,8 +1658,8 @@
 .,.,
 
-# reduce 47 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 151)
-  def _reduce_48(val, _values, result)
+# reduce 49 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 158)
+  def _reduce_50(val, _values, result)
      result = [ :OP_LT, val[0], val[2] ]  
     result
@@ -1569,6 +1667,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 153)
-  def _reduce_49(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 160)
+  def _reduce_51(val, _values, result)
      result = [ :OP_GT, val[0], val[2] ]  
     result
@@ -1576,6 +1674,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 155)
-  def _reduce_50(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 162)
+  def _reduce_52(val, _values, result)
      result = [ :OP_LE, val[0], val[2] ]  
     result
@@ -1583,6 +1681,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 157)
-  def _reduce_51(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 164)
+  def _reduce_53(val, _values, result)
      result = [ :OP_GE, val[0], val[2] ]  
     result
@@ -1590,8 +1688,8 @@
 .,.,
 
-# reduce 52 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 162)
-  def _reduce_53(val, _values, result)
+# reduce 54 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 169)
+  def _reduce_55(val, _values, result)
      result = [ :OP_EQ, val[0], val[2] ]  
     result
@@ -1599,6 +1697,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 164)
-  def _reduce_54(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 171)
+  def _reduce_56(val, _values, result)
      result = [ :OP_NE, val[0], val[2] ]  
     result
@@ -1606,8 +1704,8 @@
 .,.,
 
-# reduce 55 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 169)
-  def _reduce_56(val, _values, result)
+# reduce 57 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 176)
+  def _reduce_58(val, _values, result)
      result = [ :OP_AND, val[0], val[2] ]  
     result
@@ -1615,8 +1713,8 @@
 .,.,
 
-# reduce 57 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 174)
-  def _reduce_58(val, _values, result)
+# reduce 59 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 181)
+  def _reduce_60(val, _values, result)
      result = [ :OP_EOR, val[0], val[2] ]  
     result
@@ -1624,8 +1722,8 @@
 .,.,
 
-# reduce 59 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 179)
-  def _reduce_60(val, _values, result)
+# reduce 61 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 186)
+  def _reduce_62(val, _values, result)
      result = [ :OP_OR, val[0], val[2] ]  
     result
@@ -1633,8 +1731,8 @@
 .,.,
 
-# reduce 61 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 184)
-  def _reduce_62(val, _values, result)
+# reduce 63 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 191)
+  def _reduce_64(val, _values, result)
      result = [ :OP_LAND, val[0], val[2] ]  
     result
@@ -1642,8 +1740,8 @@
 .,.,
 
-# reduce 63 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 189)
-  def _reduce_64(val, _values, result)
+# reduce 65 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 196)
+  def _reduce_66(val, _values, result)
      result = [ :OP_LOR, val[0], val[2] ]  
     result
@@ -1651,8 +1749,8 @@
 .,.,
 
-# reduce 65 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 194)
-  def _reduce_66(val, _values, result)
+# reduce 67 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 201)
+  def _reduce_68(val, _values, result)
      result = [ :OP_CEX, val[0], val[2].get_elements, val[4] ]  
     result
@@ -1660,6 +1758,32 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 201)
-  def _reduce_67(val, _values, result)
+# reduce 69 omitted
+
+# reduce 70 omitted
+
+# reduce 71 omitted
+
+# reduce 72 omitted
+
+# reduce 73 omitted
+
+# reduce 74 omitted
+
+# reduce 75 omitted
+
+# reduce 76 omitted
+
+# reduce 77 omitted
+
+# reduce 78 omitted
+
+# reduce 79 omitted
+
+# reduce 80 omitted
+
+# reduce 81 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 223)
+  def _reduce_82(val, _values, result)
     			result = Expression.new( val[0] )
 			# result.print
@@ -1669,6 +1793,14 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 208)
-  def _reduce_68(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 228)
+  def _reduce_83(val, _values, result)
+    			result = Expression.new( val[2] )    # ',' の後ろを採用
+		
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 234)
+  def _reduce_84(val, _values, result)
     			result = Expression.new( val[0] )
 			# result.print
@@ -1685,8 +1817,8 @@
 .,.,
 
-# reduce 69 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 237)
-  def _reduce_70(val, _values, result)
+# reduce 85 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 261)
+  def _reduce_86(val, _values, result)
     			result = CIntType.new( -3 )    # storage class は無視
 		
@@ -1695,8 +1827,24 @@
 .,.,
 
-# reduce 71 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 242)
-  def _reduce_72(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 265)
+  def _reduce_87(val, _values, result)
+    			result = val[1]                # storage class は無視
+		
+    result
+  end
+.,.,
+
+# reduce 88 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 270)
+  def _reduce_89(val, _values, result)
+    			result = val[1].merge val[0]
+		
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 274)
+  def _reduce_90(val, _values, result)
     			result = CIntType.new( -3 )
 			result.set_qualifier val[0]
@@ -1706,31 +1854,19 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 247)
-  def _reduce_73(val, _values, result)
-    			result = val[1]                # storage class は無視
-		
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 251)
-  def _reduce_74(val, _values, result)
-    			result = val[1].merge val[0]
-		
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 255)
-  def _reduce_75(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 279)
+  def _reduce_91(val, _values, result)
     			val[1].set_qualifier val[0]
-                        result = val[1]
-		
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 262)
-  def _reduce_76(val, _values, result)
+						result = val[1]
+		
+    result
+  end
+.,.,
+
+# reduce 92 omitted
+
+# reduce 93 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 287)
+  def _reduce_94(val, _values, result)
      result = [val[0]] 
     result
@@ -1738,6 +1874,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 264)
-  def _reduce_77(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 289)
+  def _reduce_95(val, _values, result)
      result << val[2] 
     result
@@ -1745,8 +1881,8 @@
 .,.,
 
-# reduce 78 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 269)
-  def _reduce_79(val, _values, result)
+# reduce 96 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 294)
+  def _reduce_97(val, _values, result)
      val[0].set_initializer( val[2] ) 
     result
@@ -1754,6 +1890,14 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 272)
-  def _reduce_80(val, _values, result)
+# reduce 98 omitted
+
+# reduce 99 omitted
+
+# reduce 100 omitted
+
+# reduce 101 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 304)
+  def _reduce_102(val, _values, result)
      set_no_type_name true; result = CVoidType.new 
     result
@@ -1761,6 +1905,34 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 273)
-  def _reduce_81(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 306)
+  def _reduce_103(val, _values, result)
+     set_no_type_name true; result = CIntType.new(-11 ) 
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 308)
+  def _reduce_104(val, _values, result)
+     set_no_type_name true; result = CIntType.new( -2 ) 
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 310)
+  def _reduce_105(val, _values, result)
+     set_no_type_name true; result = CIntType.new( -3 ) 
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 312)
+  def _reduce_106(val, _values, result)
+     set_no_type_name true; result = CIntType.new( -4 ) 
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 314)
+  def _reduce_107(val, _values, result)
      set_no_type_name true; result = CFloatType.new(-32) 
     result
@@ -1768,6 +1940,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 274)
-  def _reduce_82(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 316)
+  def _reduce_108(val, _values, result)
      set_no_type_name true; result = CFloatType.new(-64) 
     result
@@ -1775,69 +1947,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 275)
-  def _reduce_83(val, _values, result)
-     set_no_type_name true; result = CBoolType.new 
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 276)
-  def _reduce_84(val, _values, result)
-     set_no_type_name true; result = val[0] 
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 277)
-  def _reduce_85(val, _values, result)
-     set_no_type_name true; result = CVoidType.new 
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 278)
-  def _reduce_86(val, _values, result)
-     set_no_type_name true; result = CVoidType.new 
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 279)
-  def _reduce_87(val, _values, result)
-     set_no_type_name true; result = CDefinedType.new( val[0].val ) 
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 281)
-  def _reduce_88(val, _values, result)
-     set_no_type_name true; result = CIntType.new(-11 ) 
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 282)
-  def _reduce_89(val, _values, result)
-     set_no_type_name true; result = CIntType.new( -2 ) 
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 283)
-  def _reduce_90(val, _values, result)
-     set_no_type_name true; result = CIntType.new( -3 ) 
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 284)
-  def _reduce_91(val, _values, result)
-     set_no_type_name true; result = CIntType.new( -4 ) 
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 287)
-  def _reduce_92(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 319)
+  def _reduce_109(val, _values, result)
     			set_no_type_name true
 			result = CIntType.new( -3 )
@@ -1848,6 +1957,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 293)
-  def _reduce_93(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 325)
+  def _reduce_110(val, _values, result)
     			set_no_type_name true
 			result = CIntType.new( -3 )
@@ -1858,6 +1967,41 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 302)
-  def _reduce_94(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 330)
+  def _reduce_111(val, _values, result)
+     set_no_type_name true; result = CBoolType.new 
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 332)
+  def _reduce_112(val, _values, result)
+     set_no_type_name true; result = val[0] 
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 334)
+  def _reduce_113(val, _values, result)
+     set_no_type_name true; result = CVoidType.new 
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 336)
+  def _reduce_114(val, _values, result)
+     set_no_type_name true; result = CVoidType.new 
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 338)
+  def _reduce_115(val, _values, result)
+     set_no_type_name true; result = CDefinedType.new( val[0].val ) 
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 344)
+  def _reduce_116(val, _values, result)
      StructType.set_define( true )  
     result
@@ -1865,6 +2009,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 305)
-  def _reduce_95(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 347)
+  def _reduce_117(val, _values, result)
     			StructType.end_of_parse
 			result = val[1]
@@ -1874,6 +2018,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 311)
-  def _reduce_96(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 353)
+  def _reduce_118(val, _values, result)
     			result = CStructType.new()
 			StructType.set_define( true )
@@ -1883,6 +2027,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 316)
-  def _reduce_97(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 358)
+  def _reduce_119(val, _values, result)
     			StructType.end_of_parse
 			result = val[1]
@@ -1892,6 +2036,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 322)
-  def _reduce_98(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 364)
+  def _reduce_120(val, _values, result)
     			StructType.set_define( false )
 			StructType.end_of_parse
@@ -1902,6 +2046,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 328)
-  def _reduce_99(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 370)
+  def _reduce_121(val, _values, result)
      set_no_type_name true 
     result
@@ -1909,10 +2053,10 @@
 .,.,
 
-# reduce 100 omitted
-
-# reduce 101 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 337)
-  def _reduce_102(val, _values, result)
+# reduce 122 omitted
+
+# reduce 123 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 379)
+  def _reduce_124(val, _values, result)
     			result = CStructType.new( val[0].val )
 			set_no_type_name true
@@ -1922,6 +2066,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 346)
-  def _reduce_103(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 388)
+  def _reduce_125(val, _values, result)
     			val[1].each { |i|	# i: Decl
 				i.set_type( val[0] )
@@ -1936,12 +2080,24 @@
 .,.,
 
-# reduce 104 omitted
-
-# reduce 105 omitted
-
-# reduce 106 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 365)
-  def _reduce_107(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 399)
+  def _reduce_126(val, _values, result)
+    			val[1].each { |i|	# i: Decl
+				i.set_type( val[0] )
+				i.set_kind( :MEMBER )
+				i.check
+				CStructType.new_member( i )
+			}
+			result = val[1]
+		
+    result
+  end
+.,.,
+
+# reduce 127 omitted
+
+# reduce 128 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 417)
+  def _reduce_129(val, _values, result)
     			result = val[1].merge val[0]
 		
@@ -1950,6 +2106,17 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 369)
-  def _reduce_108(val, _values, result)
+# reduce 130 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 422)
+  def _reduce_131(val, _values, result)
+    			val[1].set_qualifier val[0]
+						result = val[1]
+		
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 427)
+  def _reduce_132(val, _values, result)
     			result = CIntType.new( -3 )
 			result.set_qualifier val[0]
@@ -1959,15 +2126,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 374)
-  def _reduce_109(val, _values, result)
-    			val[1].set_qualifier val[0]
-                        result = val[1]
-		
-    result
-  end
-.,.,
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 380)
-  def _reduce_110(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 433)
+  def _reduce_133(val, _values, result)
      result = [ val[0] ] 
     result
@@ -1975,6 +2133,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 382)
-  def _reduce_111(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 435)
+  def _reduce_134(val, _values, result)
      result << val[2] 
     result
@@ -1982,14 +2140,14 @@
 .,.,
 
-# reduce 112 omitted
-
-# reduce 113 omitted
-
-# reduce 114 omitted
-
-# reduce 115 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 399)
-  def _reduce_116(val, _values, result)
+# reduce 135 omitted
+
+# reduce 136 omitted
+
+# reduce 137 omitted
+
+# reduce 138 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 452)
+  def _reduce_139(val, _values, result)
      set_no_type_name true 
     result
@@ -1997,45 +2155,52 @@
 .,.,
 
-# reduce 117 omitted
-
-# reduce 118 omitted
-
-# reduce 119 omitted
-
-# reduce 120 omitted
-
-# reduce 121 omitted
-
-# reduce 122 omitted
-
-# reduce 123 omitted
-
-# reduce 124 omitted
-
-# reduce 125 omitted
-
-# reduce 126 omitted
-
-# reduce 127 omitted
-
-# reduce 128 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 430)
-  def _reduce_129(val, _values, result)
-     result = CEnumType.new( -1 ) 
-    result
-  end
-.,.,
-
-# reduce 130 omitted
-
-# reduce 131 omitted
-
-# reduce 132 omitted
-
-# reduce 133 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 446)
-  def _reduce_134(val, _values, result)
+# reduce 140 omitted
+
+# reduce 141 omitted
+
+# reduce 142 omitted
+
+# reduce 143 omitted
+
+# reduce 144 omitted
+
+# reduce 145 omitted
+
+# reduce 146 omitted
+
+# reduce 147 omitted
+
+# reduce 148 omitted
+
+# reduce 149 omitted
+
+# reduce 150 omitted
+
+# reduce 151 omitted
+
+# reduce 152 omitted
+
+# reduce 153 omitted
+
+# reduce 154 omitted
+
+# reduce 155 omitted
+
+# reduce 156 omitted
+
+# reduce 157 omitted
+
+# reduce 158 omitted
+
+# reduce 159 omitted
+
+# reduce 160 omitted
+
+# reduce 161 omitted
+
+# reduce 162 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 495)
+  def _reduce_163(val, _values, result)
      result = :CONST 
     result
@@ -2043,6 +2208,8 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 447)
-  def _reduce_135(val, _values, result)
+# reduce 164 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 498)
+  def _reduce_165(val, _values, result)
      result = :VOLATILE 
     result
@@ -2050,6 +2217,14 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 452)
-  def _reduce_136(val, _values, result)
+# reduce 166 omitted
+
+# reduce 167 omitted
+
+# reduce 168 omitted
+
+# reduce 169 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 509)
+  def _reduce_170(val, _values, result)
     			val[1].set_type( val[0] )
 			result = val[1]
@@ -2059,8 +2234,8 @@
 .,.,
 
-# reduce 137 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 458)
-  def _reduce_138(val, _values, result)
+# reduce 171 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 515)
+  def _reduce_172(val, _values, result)
     			result = Decl.new( val[1].val )
 			result.set_type( val[0] )
@@ -2070,6 +2245,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 464)
-  def _reduce_139(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 521)
+  def _reduce_173(val, _values, result)
      result = Decl.new( val[0].val ) 
     result
@@ -2077,6 +2252,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 466)
-  def _reduce_140(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 523)
+  def _reduce_174(val, _values, result)
      result = val[1] 
     result
@@ -2084,6 +2259,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 469)
-  def _reduce_141(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 526)
+  def _reduce_175(val, _values, result)
     			val[0].set_type( CArrayType.new( val[2] ) )
 			result = val[0]
@@ -2093,6 +2268,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 474)
-  def _reduce_142(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 531)
+  def _reduce_176(val, _values, result)
     			val[0].set_type( CArrayType.new )
 			result = val[0]
@@ -2102,6 +2277,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 479)
-  def _reduce_143(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 536)
+  def _reduce_177(val, _values, result)
     		# 	Generator.warning( "W6001 need 'void' for no parameter"  )
 			val[0].set_type( CFuncType.new )
@@ -2112,6 +2287,8 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 487)
-  def _reduce_144(val, _values, result)
+# reduce 178 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 543)
+  def _reduce_179(val, _values, result)
     		# 	Generator.warning( "W6002 need 'void' for no parameter"  )
 			val[0].set_type( CFuncType.new )
@@ -2122,6 +2299,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 494)
-  def _reduce_145(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 550)
+  def _reduce_180(val, _values, result)
      result = CPtrType.new 
     result
@@ -2129,6 +2306,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 497)
-  def _reduce_146(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 553)
+  def _reduce_181(val, _values, result)
     			result = CPtrType.new
 			result.set_qualifier( val[1] )
@@ -2138,6 +2315,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 502)
-  def _reduce_147(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 558)
+  def _reduce_182(val, _values, result)
     			val[1].set_type(CPtrType.new)
 			result = val[1]
@@ -2147,6 +2324,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 507)
-  def _reduce_148(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 563)
+  def _reduce_183(val, _values, result)
     			ptrtype = CPtrType.new
 			ptrtype.set_qualifier( val[1] )
@@ -2158,40 +2335,48 @@
 .,.,
 
-# reduce 149 omitted
-
-# reduce 150 omitted
-
-# reduce 151 omitted
-
-# reduce 152 omitted
-
-# reduce 153 omitted
-
-# reduce 154 omitted
-
-# reduce 155 omitted
-
-# reduce 156 omitted
-
-# reduce 157 omitted
-
-# reduce 158 omitted
-
-# reduce 159 omitted
-
-# reduce 160 omitted
-
-# reduce 161 omitted
-
-# reduce 162 omitted
-
-# reduce 163 omitted
-
-# reduce 164 omitted
-
-# reduce 165 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 571)
-  def _reduce_166(val, _values, result)
+# reduce 184 omitted
+
+# reduce 185 omitted
+
+# reduce 186 omitted
+
+# reduce 187 omitted
+
+# reduce 188 omitted
+
+# reduce 189 omitted
+
+# reduce 190 omitted
+
+# reduce 191 omitted
+
+# reduce 192 omitted
+
+# reduce 193 omitted
+
+# reduce 194 omitted
+
+# reduce 195 omitted
+
+# reduce 196 omitted
+
+# reduce 197 omitted
+
+# reduce 198 omitted
+
+# reduce 199 omitted
+
+# reduce 200 omitted
+
+# reduce 201 omitted
+
+# reduce 202 omitted
+
+# reduce 203 omitted
+
+# reduce 204 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 630)
+  def _reduce_205(val, _values, result)
     			Generator.warning( "W6003 need 'void' for no parameter"  )
 		
@@ -2200,8 +2385,8 @@
 .,.,
 
-# reduce 167 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 576)
-  def _reduce_168(val, _values, result)
+# reduce 206 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 635)
+  def _reduce_207(val, _values, result)
     			Generator.warning( "W6004 need 'void' for no parameter"  )
 		
@@ -2210,8 +2395,8 @@
 .,.,
 
-# reduce 169 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 583)
-  def _reduce_170(val, _values, result)
+# reduce 208 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 642)
+  def _reduce_209(val, _values, result)
      result = val[0] 
     result
@@ -2219,6 +2404,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 585)
-  def _reduce_171(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 644)
+  def _reduce_210(val, _values, result)
      result = val[1] 
     result
@@ -2226,6 +2411,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 587)
-  def _reduce_172(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 646)
+  def _reduce_211(val, _values, result)
      result = val[1] 
     result
@@ -2233,6 +2418,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 589)
-  def _reduce_173(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 648)
+  def _reduce_212(val, _values, result)
      result = C_EXP.new( val[2] ) 
     result
@@ -2240,6 +2425,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 594)
-  def _reduce_174(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 653)
+  def _reduce_213(val, _values, result)
     			result = [ val[0] ]
 		
@@ -2248,6 +2433,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 598)
-  def _reduce_175(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 657)
+  def _reduce_214(val, _values, result)
     			val[0] << val[2]
 			result = val[0]
@@ -2257,28 +2442,28 @@
 .,.,
 
-# reduce 176 omitted
-
-# reduce 177 omitted
-
-# reduce 178 omitted
-
-# reduce 179 omitted
-
-# reduce 180 omitted
-
-# reduce 181 omitted
-
-# reduce 182 omitted
-
-# reduce 183 omitted
-
-# reduce 184 omitted
-
-# reduce 185 omitted
-
-# reduce 186 omitted
-
-module_eval(<<'.,.,', 'C_parser.y.rb', 626)
-  def _reduce_187(val, _values, result)
+# reduce 215 omitted
+
+# reduce 216 omitted
+
+# reduce 217 omitted
+
+# reduce 218 omitted
+
+# reduce 219 omitted
+
+# reduce 220 omitted
+
+# reduce 221 omitted
+
+# reduce 222 omitted
+
+# reduce 223 omitted
+
+# reduce 224 omitted
+
+# reduce 225 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 685)
+  def _reduce_226(val, _values, result)
     			val[2].each{ |i|
 			   i.set_kind( :TYPEDEF )
@@ -2291,6 +2476,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 635)
-  def _reduce_188(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 694)
+  def _reduce_227(val, _values, result)
      result = [ val[0] ] 
     result
@@ -2298,6 +2483,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 637)
-  def _reduce_189(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 696)
+  def _reduce_228(val, _values, result)
      result << val[2] 
     result
@@ -2305,82 +2490,4 @@
 .,.,
 
-# reduce 190 omitted
-
-# reduce 191 omitted
-
-# reduce 192 omitted
-
-# reduce 193 omitted
-
-# reduce 194 omitted
-
-# reduce 195 omitted
-
-# reduce 196 omitted
-
-# reduce 197 omitted
-
-# reduce 198 omitted
-
-# reduce 199 omitted
-
-# reduce 200 omitted
-
-# reduce 201 omitted
-
-# reduce 202 omitted
-
-# reduce 203 omitted
-
-# reduce 204 omitted
-
-# reduce 205 omitted
-
-# reduce 206 omitted
-
-# reduce 207 omitted
-
-# reduce 208 omitted
-
-# reduce 209 omitted
-
-# reduce 210 omitted
-
-# reduce 211 omitted
-
-# reduce 212 omitted
-
-# reduce 213 omitted
-
-# reduce 214 omitted
-
-# reduce 215 omitted
-
-# reduce 216 omitted
-
-# reduce 217 omitted
-
-# reduce 218 omitted
-
-# reduce 219 omitted
-
-# reduce 220 omitted
-
-# reduce 221 omitted
-
-# reduce 222 omitted
-
-# reduce 223 omitted
-
-# reduce 224 omitted
-
-# reduce 225 omitted
-
-# reduce 226 omitted
-
-# reduce 227 omitted
-
-# reduce 228 omitted
-
 # reduce 229 omitted
 
@@ -2405,6 +2512,56 @@
 # reduce 239 omitted
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 718)
-  def _reduce_240(val, _values, result)
+# reduce 240 omitted
+
+# reduce 241 omitted
+
+# reduce 242 omitted
+
+# reduce 243 omitted
+
+# reduce 244 omitted
+
+# reduce 245 omitted
+
+# reduce 246 omitted
+
+# reduce 247 omitted
+
+# reduce 248 omitted
+
+# reduce 249 omitted
+
+# reduce 250 omitted
+
+# reduce 251 omitted
+
+# reduce 252 omitted
+
+# reduce 253 omitted
+
+# reduce 254 omitted
+
+# reduce 255 omitted
+
+# reduce 256 omitted
+
+# reduce 257 omitted
+
+# reduce 258 omitted
+
+# reduce 259 omitted
+
+# reduce 260 omitted
+
+# reduce 261 omitted
+
+# reduce 262 omitted
+
+# reduce 263 omitted
+
+# reduce 264 omitted
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 761)
+  def _reduce_265(val, _values, result)
      result = NamespacePath.new( val[0].val, false ) 
     result
@@ -2412,6 +2569,6 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 719)
-  def _reduce_241(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 762)
+  def _reduce_266(val, _values, result)
      result = NamespacePath.new( val[1].val, true ) 
     result
@@ -2419,7 +2576,24 @@
 .,.,
 
-module_eval(<<'.,.,', 'C_parser.y.rb', 721)
-  def _reduce_242(val, _values, result)
+module_eval(<<'.,.,', 'C_parser.y.rb', 764)
+  def _reduce_267(val, _values, result)
      result = val[0].append!( val[2].val ) 
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'C_parser.y.rb', 768)
+  def _reduce_268(val, _values, result)
+    		while true
+			# ';' が表れるまで、トークンを読み飛ばす。
+			# gcc の構文拡張に対応すべきだが、単純な実装として、';' まで読み飛ばす。
+			# トークン単位で読み飛ばしているので、文字列やコメント内の ';' は対象にならない。
+			token = next_token
+			if token[1].val == ";"
+				break
+			end
+			# p "skip: #{token[1].val}" 
+		end
+		
     result
   end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb	(revision 374)
@@ -4,7 +4,7 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   上記著作権者は，以下の(1)〜(4)の条件を満たす場合に限り，本ソフトウェ
 #   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
 #   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
@@ -48,7 +48,12 @@
 # argument_expression_list(関数引数), assignment_expression(代入)がない
 # 式の result は、すべて配列で第一要素が識別シンボル、第二要素以下が引数
+#
+# 2019/3/28 長島 下記のC99の構文に近づくよう変更
+#（読めないヘッダーファイルがあったため）
+# http://www.quut.com/c/ANSI-C-grammar-y-1999.html
+# 元々のコメントと合わなくなっています
 
 primary_expression
-        : namespace_identifier
+		: namespace_identifier
 		{ result = [ :IDENTIFIER, val[0] ] }     #1ok
 #        : IDENTIFIER	# mikan namespace への対応
@@ -58,53 +63,55 @@
 #        | FALSE
 #		{ result = [ :BOOL_CONSTANT, false ] }
-        | INTEGER_CONSTANT
+		| INTEGER_CONSTANT
 		{ result = [ :INTEGER_CONSTANT, val[0] ] }
-        | FLOATING_CONSTANT
+		| FLOATING_CONSTANT
 		{ result = [ :FLOATING_CONSTANT, val[0] ] }
-        | OCTAL_CONSTANT
+		| OCTAL_CONSTANT
 		{ result = [ :OCTAL_CONSTANT, val[0] ] }
-        | HEX_CONSTANT
+		| HEX_CONSTANT
 		{ result = [ :HEX_CONSTANT, val[0] ] }
-        | CHARACTER_LITERAL
+		| CHARACTER_LITERAL
 		{ result = [ :CHARACTER_LITERAL, val[0] ] }
-        | string_literal_list
+		| string_literal_list
 		{ result = [ :STRING_LITERAL_LIST, val[0] ] }
-        | '(' expression ')'
+		| '(' expression ')'
 		{ result = [ :PARENTHESES, val[1].get_elements ] }
 
 string_literal_list
-        : STRING_LITERAL
+		: STRING_LITERAL
 		{ result = [val[0]] }
-        | string_literal_list STRING_LITERAL
+		| string_literal_list STRING_LITERAL
 		{ result << val[1] }
 
 # 関数呼び出しと後置インクリメント、デクリメント演算子がない
 postfix_expression
-        : primary_expression
-        | primary_expression '(' argument_list ')'
-        | primary_expression type_qualifier '(' argument_list ')'    # intended __asm volatile ( "   MNEMONIC  OPERAND" );
-        | postfix_expression '[' expression ']'
+		: primary_expression
+		| postfix_expression '[' expression ']'
 		{ result = [ :OP_SUBSC, val[0], val[2] ] }
-        | postfix_expression '.' IDENTIFIER
+		| postfix_expression '(' ')'
+		| postfix_expression '(' argument_expression_list ')'
+		| postfix_expression type_qualifier '(' argument_expression_list ')'    # intended __asm volatile ( "   MNEMONIC  OPERAND" );
+		| postfix_expression '.' IDENTIFIER
 		{ result = [ :OP_DOT, val[0], val[2] ] }
-        | postfix_expression '->' IDENTIFIER
+		| postfix_expression '->' IDENTIFIER
 		{ result = [ :OP_REF, val[0], val[2] ] }
-        | postfix_expression '++'	{ result = val[0] }   # ++, -- は無視する
-        | postfix_expression '--'	{ result = val[0] }
-
-argument_list
-        :
-        | expression
-        | argument_list ',' expression
+		| postfix_expression '++'	{ result = val[0] }   # ++, -- は無視する
+		| postfix_expression '--'	{ result = val[0] }
+		| '(' type_name ')' '{' initializer_list '}'
+		| '(' type_name ')' '{' initializer_list ',' '}'
+
+argument_expression_list
+		: assignment_expression
+		| argument_expression_list ',' assignment_expression
 
 
 # 前置インクリメント、デクリメント演算子がない
 unary_expression
-        : postfix_expression
-        | unary_operator cast_expression
+		: postfix_expression
+		| unary_operator cast_expression
 		{ result = [ val[0], val[1] ] }
-        | SIZEOF unary_expression
+		| SIZEOF unary_expression
 		{ result = [ :OP_SIZEOF_EXPR, val[1] ] }
-        | SIZEOF '(' type_name ')'
+		| SIZEOF '(' type_name ')'
 		{ result = [ :OP_SIZEOF_TYPE, val[1] ] }
 		| '++' unary_expression			{ result = val[1] }   # ++, -- は無視する
@@ -112,98 +119,117 @@
 
 unary_operator
-        : '&'	{ result = :OP_U_AMP }
-        | '*'	{ result = :OP_U_ASTER }
-        | '+'	{ result = :OP_U_PLUS }
-        | '-'	{ result = :OP_U_MINUS }
-        | '~'	{ result = :OP_U_TILDE }
-        | '!'	{ result = :OP_U_EXCLAM }
+		: '&'	{ result = :OP_U_AMP }
+		| '*'	{ result = :OP_U_ASTER }
+		| '+'	{ result = :OP_U_PLUS }
+		| '-'	{ result = :OP_U_MINUS }
+		| '~'	{ result = :OP_U_TILDE }
+		| '!'	{ result = :OP_U_EXCLAM }
 
 cast_expression
-        : unary_expression
-        | '(' type_name ')' cast_expression
+		: unary_expression
+		| '(' type_name ')' cast_expression
 		{  result = [ :CAST, val[1], val[3] ] }
 
 multiplicative_expression
-        : cast_expression
-        | multiplicative_expression '*' cast_expression
+		: cast_expression
+		| multiplicative_expression '*' cast_expression
 		{ result = [ :OP_MULT, val[0], val[2] ]  }
-        | multiplicative_expression '/' cast_expression
+		| multiplicative_expression '/' cast_expression
 		{ result = [ :OP_DIV, val[0], val[2] ]  }
-        | multiplicative_expression '%' cast_expression
+		| multiplicative_expression '%' cast_expression
 		{ result = [ :OP_REMAIN, val[0], val[2] ]  }
 
 additive_expression
-        : multiplicative_expression
-        | additive_expression '+' multiplicative_expression
+		: multiplicative_expression
+		| additive_expression '+' multiplicative_expression
 		{ result = [ :OP_ADD, val[0], val[2] ]  }
-        | additive_expression '-' multiplicative_expression
+		| additive_expression '-' multiplicative_expression
 		{ result = [ :OP_SUB, val[0], val[2] ]  }
 
 shift_expression
-        : additive_expression
-        | shift_expression '<<' additive_expression
+		: additive_expression
+		| shift_expression '<<' additive_expression
 		{ result = [ :OP_LSFT, val[0], val[2] ]  }
-        | shift_expression '>>' additive_expression
+		| shift_expression '>>' additive_expression
 		{ result = [ :OP_RSFT, val[0], val[2] ]  }
 
 relational_expression
-        : shift_expression
-        | relational_expression '<' shift_expression
+		: shift_expression
+		| relational_expression '<' shift_expression
 		{ result = [ :OP_LT, val[0], val[2] ]  }
-        | relational_expression '>' shift_expression
+		| relational_expression '>' shift_expression
 		{ result = [ :OP_GT, val[0], val[2] ]  }
-        | relational_expression '<=' shift_expression
+		| relational_expression '<=' shift_expression
 		{ result = [ :OP_LE, val[0], val[2] ]  }
-        | relational_expression '>=' shift_expression
+		| relational_expression '>=' shift_expression
 		{ result = [ :OP_GE, val[0], val[2] ]  }
 
 equality_expression
-        : relational_expression
-        | equality_expression '==' relational_expression
+		: relational_expression
+		| equality_expression '==' relational_expression
 		{ result = [ :OP_EQ, val[0], val[2] ]  }
-        | equality_expression '!=' relational_expression
+		| equality_expression '!=' relational_expression
 		{ result = [ :OP_NE, val[0], val[2] ]  }
 
 and_expression
-        : equality_expression
-        | and_expression '&' equality_expression
+		: equality_expression
+		| and_expression '&' equality_expression
 		{ result = [ :OP_AND, val[0], val[2] ]  }
 
 exclusive_or_expression
-        : and_expression
-        | exclusive_or_expression '^' and_expression
+		: and_expression
+		| exclusive_or_expression '^' and_expression
 		{ result = [ :OP_EOR, val[0], val[2] ]  }
 
 inclusive_or_expression
-        : exclusive_or_expression
-        | inclusive_or_expression '|' exclusive_or_expression
+		: exclusive_or_expression
+		| inclusive_or_expression '|' exclusive_or_expression
 		{ result = [ :OP_OR, val[0], val[2] ]  }
 
 logical_and_expression
-        : inclusive_or_expression
-        | logical_and_expression '&&' inclusive_or_expression
+		: inclusive_or_expression
+		| logical_and_expression '&&' inclusive_or_expression
 		{ result = [ :OP_LAND, val[0], val[2] ]  }
 
 logical_or_expression
-        : logical_and_expression
-        | logical_or_expression '||' logical_and_expression
+		: logical_and_expression
+		| logical_or_expression '||' logical_and_expression
 		{ result = [ :OP_LOR, val[0], val[2] ]  }
 
 conditional_expression
-        : logical_or_expression
-        | logical_or_expression '?' expression ':' conditional_expression
+		: logical_or_expression
+		| logical_or_expression '?' expression ':' conditional_expression
 		{ result = [ :OP_CEX, val[0], val[2].get_elements, val[4] ]  }
 
-
-# コンマ演算子が使えない
+assignment_expression
+		: conditional_expression
+		| unary_expression assignment_operator assignment_expression
+
+assignment_operator
+		: '='
+		| '+='
+		| '-='
+		| '*='
+		| '/='
+		| '%='
+		| '<<='
+		| '>>='
+		| '&='
+		| '|='
+		| '^='
+
 expression
-        : conditional_expression
+		: assignment_expression
 		{
 			result = Expression.new( val[0] )
 			# result.print
 		}
+		| expression ',' assignment_expression
+		{
+			result = Expression.new( val[2] )    # ',' の後ろを採用
+		}
 
 constant_expression
-        : conditional_expression
+		: conditional_expression
 		{
 			result = Expression.new( val[0] )
@@ -218,6 +244,4 @@
 		}
 
-
-
 # Types
 ##########################  宣言  ##########################
@@ -227,62 +251,70 @@
 # K&Rとの違い: storage classが指定できない、型が省略できない
 declaration
-        : declaration_specifiers init_declarator_list ';'
-#        : type_specifier_qualifier_list init_declarator_list ';'
+		: declaration_specifiers init_declarator_list ';'
+#        : specifier_qualifier_list init_declarator_list ';'
 
 # declaration_specifiersは関数のパラメータで使われるが、
-# type_specifier_qualifier_listで十分かもしれない
+# specifier_qualifier_listで十分かもしれない
 
 declaration_specifiers
-        : storage_class
+		: storage_class_specifier
 		{
 			result = CIntType.new( -3 )    # storage class は無視
 		}
-        | type_specifier
-        | type_qualifier
+		| storage_class_specifier declaration_specifiers
+		{
+			result = val[1]                # storage class は無視
+		}
+		| type_specifier
+		| type_specifier declaration_specifiers
+		{
+			result = val[1].merge val[0]
+		}
+		| type_qualifier
 		{
 			result = CIntType.new( -3 )
 			result.set_qualifier val[0]
 		}
-        | storage_class declaration_specifiers
-		{
-			result = val[1]                # storage class は無視
-		}
-        | type_specifier declaration_specifiers
-		{
-			result = val[1].merge val[0]
-		}
-        | type_qualifier declaration_specifiers
+		| type_qualifier declaration_specifiers
 		{
 			val[1].set_qualifier val[0]
-                        result = val[1]
-		}
-
+						result = val[1]
+		}
+		| function_specifier
+		| function_specifier declaration_specifiers
 
 init_declarator_list
-        : init_declarator
+		: init_declarator
 		{ result = [val[0]] }
-        | init_declarator_list ',' init_declarator
+		| init_declarator_list ',' init_declarator
 		{ result << val[2] }
 
 init_declarator
-        : declarator
-        | declarator '=' initializer
+		: declarator
+		| declarator '=' initializer
 		{ val[0].set_initializer( val[2] ) }
 
+storage_class_specifier
+		: EXTERN
+		| STATIC
+		| AUTO
+		| REGISTER
+
 type_specifier
-        : VOID	{ set_no_type_name true; result = CVoidType.new }
-        | FLOAT	{ set_no_type_name true; result = CFloatType.new(-32) }
-        | DOUBLE	{ set_no_type_name true; result = CFloatType.new(-64) }
-        | BOOL	{ 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 でも呼ばれる
-        | union_specifier	{ set_no_type_name true; result = CVoidType.new }  # void が宣言されたとする
-        | enum_specifier	{ set_no_type_name true; result = CVoidType.new }  # void が宣言されたとする
-        | TYPE_NAME	{ set_no_type_name true; result = CDefinedType.new( val[0].val ) }
-
-        | CHAR	{ set_no_type_name true; result = CIntType.new(-11 ) }
-        | SHORT	{ set_no_type_name true; result = CIntType.new( -2 ) }
-        | INT		{ set_no_type_name true; result = CIntType.new( -3 ) }
-        | LONG	{ set_no_type_name true; result = CIntType.new( -4 ) }
-        | SIGNED
+		: VOID
+		{ set_no_type_name true; result = CVoidType.new }
+		| CHAR
+		{ set_no_type_name true; result = CIntType.new(-11 ) }
+		| SHORT
+		{ set_no_type_name true; result = CIntType.new( -2 ) }
+		| INT
+		{ set_no_type_name true; result = CIntType.new( -3 ) }
+		| LONG
+		{ set_no_type_name true; result = CIntType.new( -4 ) }
+		| FLOAT
+		{ set_no_type_name true; result = CFloatType.new(-32) }
+		| DOUBLE
+		{ set_no_type_name true; result = CFloatType.new(-64) }
+		| SIGNED
 		{
 			set_no_type_name true
@@ -290,5 +322,5 @@
 			result.set_sign :SIGNED
 		}
-        | UNSIGNED
+		| UNSIGNED
 		{
 			set_no_type_name true
@@ -296,11 +328,21 @@
 			result.set_sign :UNSIGNED
 		}
+		| BOOL
+		{ 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 でも呼ばれる
+		| union_specifier
+		{ set_no_type_name true; result = CVoidType.new }  # void が宣言されたとする
+		| enum_specifier
+		{ 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 にも対応しない
 struct_specifier		# mikan
 #        : STRUCT struct_tag '{'
-        : struct_term struct_tag '{'
+		: struct_term struct_tag '{'
 		{ StructType.set_define( true )  }
-	   struct_declaration_list '}'
+		struct_declaration_list '}'
 		{
 			StructType.end_of_parse
@@ -308,10 +350,10 @@
 		}
 #        | STRUCT
-        | struct_term
+		| struct_term
 		{
 			result = CStructType.new()
 			StructType.set_define( true )
 		}
-	   '{' struct_declaration_list '}'
+		'{' struct_declaration_list '}'
 		{
 			StructType.end_of_parse
@@ -319,5 +361,5 @@
 		}
 #        | STRUCT struct_tag   # mikan struct_tag は namespace 対応が必要
-        | struct_term struct_tag   # mikan struct_tag は namespace 対応が必要
+		| struct_term struct_tag   # mikan struct_tag は namespace 対応が必要
 		{
 			StructType.set_define( false )
@@ -327,12 +369,12 @@
 
 struct_term
-        : STRUCT { set_no_type_name true }
+		: STRUCT { set_no_type_name true }
 
 struct_declaration_list
-        : struct_declaration
-        | struct_declaration_list struct_declaration
+		: struct_declaration
+		| struct_declaration_list struct_declaration
 
 struct_tag:
-        IDENTIFIER
+		IDENTIFIER
 		{
 			result = CStructType.new( val[0].val )
@@ -342,6 +384,6 @@
 # ポインタ修飾子を追加
 struct_declaration
-        : declaration_specifiers struct_declarator_list ';'
-#        :                                type_specifier_qualifier_list struct_declarator_list ';'
+		: declaration_specifiers struct_declarator_list ';'
+#        :                                specifier_qualifier_list struct_declarator_list ';'
 		{
 			val[1].each { |i|	# i: Decl
@@ -353,6 +395,17 @@
 			result = val[1]
 		}
-        | union_specifier ';'                       # 無名
-        | struct_specifier ';'                       # 無名
+		# ビットフィールドを読み飛ばし
+		| declaration_specifiers struct_declarator_list ':' constant_expression ';'
+		{
+			val[1].each { |i|	# i: Decl
+				i.set_type( val[0] )
+				i.set_kind( :MEMBER )
+				i.check
+				CStructType.new_member( i )
+			}
+			result = val[1]
+		}
+		| union_specifier ';'                       # 無名
+		| struct_specifier ';'                       # 無名
 
 
@@ -360,32 +413,32 @@
 # K&Rのspecifier_qualifier_listと同じ
 # 名前がまぎらわしかったのでtype_を付けた
-type_specifier_qualifier_list
-        : type_specifier
-        | type_specifier type_specifier_qualifier_list
+specifier_qualifier_list
+		: type_specifier specifier_qualifier_list
 		{
 			result = val[1].merge val[0]
 		}
-        | type_qualifier
+		| type_specifier
+		| type_qualifier specifier_qualifier_list
+		{
+			val[1].set_qualifier val[0]
+						result = val[1]
+		}
+		| type_qualifier
 		{
 			result = CIntType.new( -3 )
 			result.set_qualifier val[0]
 		}
-        | type_qualifier type_specifier_qualifier_list
-		{
-			val[1].set_qualifier val[0]
-                        result = val[1]
-		}
 
 struct_declarator_list
-        : struct_declarator
+		: struct_declarator
 		{ result = [ val[0] ] }
-        | struct_declarator_list ',' struct_declarator
+		| struct_declarator_list ',' struct_declarator
 		{ result << val[2] }
 
 # ビットフィールドは使えない
 struct_declarator
-        : declarator
-
-
+		: declarator
+#		| ':' constant_expression
+#		| declarator ':' constant_expression
 
 union_specifier
@@ -393,14 +446,14 @@
 #        | UNION '{' union_declaration_list '}'
 #        | 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 '{' union_declaration_list '}'
+		| union_term '{' union_declaration_list '}'
+		| union_term union_tag   # mikan struct_tag は namespace 対応が必要
 
 union_term
-        : UNION { set_no_type_name true }
+		: UNION { set_no_type_name true }
 
 union_declaration_list
-        : union_declaration
-        | union_declaration_list union_declaration
+		: union_declaration
+		| union_declaration_list union_declaration
 
 union_tag:
@@ -408,52 +461,56 @@
 
 union_declaration
-        : declaration_specifiers union_declarator_list ';'
+		: declaration_specifiers union_declarator_list ';'
 		| union_specifier ';'                       # 無名
 		| struct_specifier ';'                      # 無名
 
 union_declarator_list
-        : union_declarator
-        | union_declarator_list ',' union_declarator
-
-# ビットフィールドは使えない
+		: union_declarator
+		| union_declarator_list ',' union_declarator
+
 union_declarator
-        : declarator
-
-
-
-# enumの種類を追加
-enum_specifier		# mikan
-        : enum_type            '{' enumerator_list '}'
-        | enum_type IDENTIFIER '{' enumerator_list '}'
-        | enum_type IDENTIFIER
-
-enum_type
-        : ENUM	{ result = CEnumType.new( -1 ) }
-#        | ENUM8	{ result = CEnumType.new( 8 ) }
-#        | ENUM16	{ result = CEnumType.new( 16 ) }
-#        | ENUM32	{ result = CEnumType.new( 32 ) }
-#        | ENUM64	{ result = CEnumType.new( 64 ) }
-#        | ENUM128	{ result = CEnumType.new( 128 ) }
+		: declarator
+		| ':' constant_expression
+		| declarator ':' constant_expression
+
+enum_specifier
+		: ENUM '{' enumerator_list '}'
+		| ENUM IDENTIFIER '{' enumerator_list '}'
+		| ENUM '{' enumerator_list ',' '}'
+		| ENUM IDENTIFIER '{' enumerator_list ',' '}'
+		| ENUM IDENTIFIER
+		| ENUM TYPE_NAME '{' enumerator_list '}'
+		| ENUM TYPE_NAME '{' enumerator_list ',' '}'
+		| ENUM TYPE_NAME
 
 enumerator_list
-        : enumerator
-        | enumerator_list ',' enumerator
+		: enumerator
+		| enumerator_list ',' enumerator
 
 enumerator
-        : IDENTIFIER
-        | IDENTIFIER '=' constant_expression
+		: IDENTIFIER
+		| IDENTIFIER '=' constant_expression
 
 type_qualifier
-        : CONST	{ result = :CONST }
-        | VOLATILE	{ result = :VOLATILE }
+		: CONST
+		{ result = :CONST }
+		| RESTRICT
+		| VOLATILE
+		{ result = :VOLATILE }
+
+function_specifier
+		: __INLINE__
+		| INLINE
+		| __INLINE
+		| CINLINE
 
 declarator
-        : pointer direct_declarator
+		: pointer direct_declarator
 		{
 			val[1].set_type( val[0] )
 			result = val[1]
 		}
-        | direct_declarator
-        | pointer TYPE_NAME     # 関数ポインタの typedef が二重定義の場合
+		| direct_declarator
+		| pointer TYPE_NAME     # 関数ポインタの typedef が二重定義の場合
 		{
 			result = Decl.new( val[1].val )
@@ -462,19 +519,19 @@
 
 direct_declarator		# mikan
-        : IDENTIFIER
+		: IDENTIFIER
 		{ result = Decl.new( val[0].val ) }
-        | '(' declarator ')'
+		| '(' declarator ')'
 		{ result = val[1] }
-        | direct_declarator '[' constant_expression ']'
+		| direct_declarator '[' constant_expression ']'
 		{
 			val[0].set_type( CArrayType.new( val[2] ) )
 			result = val[0]
 		}
-        | direct_declarator '[' ']'
+		| direct_declarator '[' ']'
 		{
 			val[0].set_type( CArrayType.new )
 			result = val[0]
 		}
-        | direct_declarator '(' parameter_type_list ')'
+		| direct_declarator '(' parameter_type_list ')'
 		{
 		# 	Generator.warning( "W6001 need 'void' for no parameter"  )
@@ -482,7 +539,6 @@
 			result = val[0]
 		}
-
-#        | direct_declarator '(' identifier_list ')'  # これは何のために必要？ 060211
-        | direct_declarator '(' ')'
+		| direct_declarator '(' identifier_list ')'  # これは何のために必要？ 060211
+		| direct_declarator '(' ')'
 		{
 		# 	Generator.warning( "W6002 need 'void' for no parameter"  )
@@ -492,17 +548,17 @@
 
 pointer
-        : '*'
+		: '*'
 		{ result = CPtrType.new }
-        | '*' type_qualifier
+		| '*' type_qualifier_list
 		{
 			result = CPtrType.new
 			result.set_qualifier( val[1] )
 		}
-        | '*' pointer
+		| '*' pointer
 		{
 			val[1].set_type(CPtrType.new)
 			result = val[1]
 		}
-        | '*' type_qualifier pointer
+		| '*' type_qualifier_list pointer
 		{
 			ptrtype = CPtrType.new
@@ -512,14 +568,17 @@
 		}
 
+type_qualifier_list
+		: type_qualifier
+		| type_qualifier_list type_qualifier
 
 parameter_type_list
-        : parameter_list
-        | parameter_list ',' '.' '.' '.'
+		: parameter_list
+		| parameter_list ',' '.' '.' '.'
 		# mikan 可変長パラメータ,  ... の間のスペースが許される（手抜き）
 
 parameter_list
-        : parameter_declaration
+		: parameter_declaration
 #		{ result = ParamList.new( val[0] ) }
-        | parameter_list ',' parameter_declaration
+		| parameter_list ',' parameter_declaration
 #		{
 #			val[0].add_param( val[2] )
@@ -530,5 +589,5 @@
 # パラメータ修飾子を追加
 parameter_declaration
-        : declaration_specifiers declarator
+		: declaration_specifiers declarator
 #		{
 #			decl = ParamDecl.new( val[1], val[0], [] )
@@ -545,55 +604,55 @@
 #			result = nil
 #		}
-        | declaration_specifiers abstract_declarator	# 仮引数なし
-        | declaration_specifiers						# 仮引数なし
-
-
-#identifier_list       # 060211  不用になった
-#        : IDENTIFIER
-#        | identifier_list ',' IDENTIFIER
+		| declaration_specifiers abstract_declarator	# 仮引数なし
+		| declaration_specifiers						# 仮引数なし
+
+
+identifier_list       # 060211  不用になった
+        : IDENTIFIER
+        | identifier_list ',' IDENTIFIER
 
 type_name
-        : type_specifier_qualifier_list
-        | type_specifier_qualifier_list abstract_declarator
+		: specifier_qualifier_list
+		| specifier_qualifier_list abstract_declarator
 
 abstract_declarator		# mikan
-        : pointer
-        | direct_abstract_declarator
-        | pointer direct_abstract_declarator
+		: pointer
+		| direct_abstract_declarator
+		| pointer direct_abstract_declarator
 
 direct_abstract_declarator
-        : '(' abstract_declarator ')'
-        | '[' ']'
-        | '[' constant_expression ']'
-        | direct_abstract_declarator '[' ']'
-        | direct_abstract_declarator '[' constant_expression ']'
-        | '(' ')'
+		: '(' abstract_declarator ')'
+		| '[' ']'
+		| '[' assignment_expression ']'
+		| direct_abstract_declarator '[' ']'
+		| direct_abstract_declarator '[' assignment_expression ']'
+		| '(' ')'
 		{
 			Generator.warning( "W6003 need 'void' for no parameter"  )
 		}
-        | '(' parameter_type_list ')'
-        | direct_abstract_declarator '(' ')'
+		| '(' parameter_type_list ')'
+		| direct_abstract_declarator '(' ')'
 		{
 			Generator.warning( "W6004 need 'void' for no parameter"  )
 		}
-        | direct_abstract_declarator '(' parameter_type_list ')'
+		| direct_abstract_declarator '(' parameter_type_list ')'
 
 # assignment_expressionをconstant_expressionに変更
 initializer			# mikan
-        : constant_expression
+		: assignment_expression
 		{ result = val[0] }
-        | '{' initializer_list '}'
+		| '{' initializer_list '}'
 		{ result = val[1] }
-        | '{' initializer_list ',' '}'
+		| '{' initializer_list ',' '}'
 		{ result = val[1] }
-	| C_EXP '(' STRING_LITERAL ')'
+		| C_EXP '(' STRING_LITERAL ')'
 		{ result = C_EXP.new( val[2] ) }
 
 initializer_list
-        : initializer
+		: initializer
 		{
 			result = [ val[0] ]
 		}
-        | initializer_list ',' initializer
+		| initializer_list ',' initializer
 		{
 			val[0] << val[2]
@@ -606,22 +665,22 @@
 #トップレベルの構文規則
 C_parser
-        :
-        | C_parser extension_statement
+		:
+		| C_parser extension_statement
 
 extension_statement
-        : statement
-        | EXTENSION statement
-
-statement
-        : typedef
-        | func_def
-        | enum_specifier ';'
-        | struct_specifier ';'
-        | declaration
-        | ';'
-        | error   # エラー回復ポイント
+		: cdl_statement
+		| EXTENSION cdl_statement
+
+cdl_statement
+		: typedef
+		| func_def
+		| enum_specifier ';'
+		| struct_specifier ';'
+		| declaration
+		| ';'
+		| error   # エラー回復ポイント
 
 typedef
-        : TYPEDEF type_specifier_qualifier_list declarator_list ';'
+        : TYPEDEF specifier_qualifier_list declarator_list ';'
 		{
 			val[2].each{ |i|
@@ -633,384 +692,389 @@
 
 declarator_list
-        : declarator
+		: declarator
 		{ result = [ val[0] ] }
-        | declarator_list ',' declarator
+		| declarator_list ',' declarator
 		{ result << val[2] }
 
 func_def
-        : declaration_specifiers declarator compoundstatement
-
-infunc_statement_list
-        :
-        | infunc_statement_list infunc_statement
-
-infunc_statement
-        : declaration
-        | ifstatement
-        | whilestatement
-        | dowhilestatement
-        | forstatement
-        | switchstatement
-        | labelstatement
-        | compoundstatement
-        | gotostatement
-        | expressionstatement
-        | ';'
+		: declaration_specifiers declarator compound_statement
+
+statement
+		: labeled_statement
+		| compound_statement
+		| expression_statement
+		| ifstatement
+		| whilestatement
+		| dowhilestatement
+		| forstatement
+		| switchstatement
+		| jump_statement
+		| asm_statement
+
+labeled_statement
+		: IDENTIFIER ':' statement
+		| CASE constant_expression ':' statement
+		| DEFAULT ':' statement
+
+compound_statement
+		: '{' '}'
+		| '{' block_item_list '}'
+
+block_item_list
+		: block_item
+		| block_item_list block_item
+
+block_item
+		: declaration
+		| statement
+
+expression_statement
+		: ';'
+		| expression ';'
 
 ifstatement
-        : IF '(' expression ')' infunc_statement
-        | IF '(' expression ')' infunc_statement ELSE infunc_statement
+		: IF '(' expression ')' statement
+		| IF '(' expression ')' statement ELSE statement
+
+switchstatement
+		: SWITCH '(' expression ')' compound_statement
 
 whilestatement
-        : WHILE '(' expression ')' infunc_statement
+		: WHILE '(' expression ')' statement
 
 dowhilestatement
-        : DO infunc_statement WHILE '(' expression ')' ';'
+		: DO statement WHILE '(' expression ')' ';'
 
 forstatement
-        : FOR '(' expression ';' expression ';' expression ')' infunc_statement
-
-switchstatement
-        : SWITCH '(' expression ')'  infunc_statment
-
-labelstatement
-        : IDENTIFIER ':' infunc_statement
-        | CASE constant_expression ':' infunc_statement
-        | DEFAULT ':' infunc_statement
-
-compoundstatement
-        : '{' infunc_statement_list '}'
-
-gotostatement
-        : GOTO IDENTIFIER ';'
-        | CONTINUE ';'
-        | BREAK ';'
-        | RETURN expression ';'
-        | RETURN ';'
-
-expressionstatement
-        : expression ';'
-        | unary_expression assignment_operator expression ';'
-
-assignment_operator
-        : '='
-        | '+='
-        | '-='
-        | '*='
-        | '/='
-        | '%='
-        | '<<='
-        | '>>='
-        | '&='
-        | '|='
-        | '^='
-
-storage_class
-        : __INLINE__
-        | INLINE
-        | __INLINE
-        | CINLINE
-        | EXTERN
-        | STATIC
-        | AUTO
-        | REGISTER
+		: FOR '(' expression_statement expression_statement ')' statement
+		| FOR '(' expression_statement expression_statement expression ')' statement
+		| FOR '(' declaration expression_statement ')' statement
+		| FOR '(' declaration expression_statement expression ')' statement
+
+jump_statement
+		: GOTO IDENTIFIER ';'
+		| CONTINUE ';'
+		| BREAK ';'
+		| RETURN ';'
+		| RETURN expression ';'
 
 namespace_identifier
-        : IDENTIFIER		{ result = NamespacePath.new( val[0].val, false ) }
-        | '::' IDENTIFIER	{ result = NamespacePath.new( val[1].val, true ) }
-        | namespace_identifier '::' IDENTIFIER
+		: IDENTIFIER		{ result = NamespacePath.new( val[0].val, false ) }
+		| '::' IDENTIFIER	{ result = NamespacePath.new( val[1].val, true ) }
+		| namespace_identifier '::' IDENTIFIER
 		{ result = val[0].append!( val[2].val ) }
 
+asm_statement
+		: _ASM {
+		while true
+			# ';' が表れるまで、トークンを読み飛ばす。
+			# gcc の構文拡張に対応すべきだが、単純な実装として、';' まで読み飛ばす。
+			# トークン単位で読み飛ばしているので、文字列やコメント内の ';' は対象にならない。
+			token = next_token
+			if token[1].val == ";"
+				break
+			end
+			# p "skip: #{token[1].val}" 
+		end
+		}
+
 end
 
 ---- inner
 
-  RESERVED = {
-    # keyword
-    'typedef' => :TYPEDEF,
-    'struct' => :STRUCT,
-    'union' => :UNION,
-    'sizeof' => :SIZEOF,
-    'throw' => :THROW,
-
-    # specifier
-    # types
-    'void'    => :VOID,
-    'char'    => :CHAR,
-    'short'   => :SHORT,
-
-    'volatile'=> :VOLATILE,
-    'const'   => :CONST,
-    'extern'   => :EXTERN,
-
-    'long'    => :LONG,
-    'float'   => :FLOAT,
-    'double'  => :DOUBLE,
-    'signed'  => :SIGNED,
-    'unsigned'=> :UNSIGNED,
-
-    'int'     => :INT,
-    'enum'    => :ENUM,
-
-    'if'      => :IF,
-    'else'    => :ELSE,
-    'while'   => :WHILE,
-    'do'      => :DO,
-    'for'     => :FOR,
-    'case'    => :CASE,
-    'default' => :DEFAULT,
-    'goto'    => :GOTO,
-    'continue' => :CONTINUE,
-    'break'   => :BREAK,
-    'return'  => :RETURN,
-    '__inline__'  => :__INLINE__,
-    'inline'  => :INLINE,
-    '__inline'  => :__INLINE,
-    'Inline'  => :CINLINE,        # inline starting with Capital letter
-    'static'  => :STATIC,
-    'register' => :REGISTER,
-    'auto'    => :AUTO,
-    '__extension__'    => :EXTENSION,
-
-  }
-
-  @@generator_nest = -1
-  @@generator_stack = []
-  @@current_locale = []
-
-  def finalize
-
-    # mikan Namespace.pop
-    Celltype.pop
-    Cell.pop
-    CompositeCelltype.pop
-    Region.pop
-
-  end
-
-  def set_plugin( plugin )
-    @plugin = plugin
-  end
-
-  def self.get_plugin
-    @@generator_stack[@@generator_nest].get_plugin
-  end
-
-  def get_plugin
-    @plugin
-  end
-
-  def parse(files)
-
-    # mikan Namespace.push
-    Celltype.push
-    Cell.push
-    CompositeCelltype.push
-    Region.push
-
-    @@generator_nest += 1
-    @@generator_stack[@@generator_nest] = self
-    @b_no_type_name = false
-
-   begin
-
-    @q = []
-    comment = false
-
-    # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
-    TECS_LANG::set_kcode_binary
-
-    # 800U, 0xffLL など (整数リテラルに共通の修飾子)
-    integer_qualifier = "([Uu][Ll][Ll]|[Uu][Ll]|[Uu]|[Ll][Ll]|[Ll])?"
-
-    files.each {|file|
-      lineno = 1
-     begin
-#2.0       IO.foreach(file) {|line|
-       TECSIO.foreach(file) {|line|
-        col = 1
-        line.rstrip!
-
-        until line.empty?
-
-          if comment
-            case line
-            # コメント終了
-            when /\A\*\//
-              comment = false
-            when /\A./
-              ;
-            end
-          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 進数定数
-            when /\A0x[0-9A-Fa-f]+#{integer_qualifier}/
-              @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
-            # 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\"       最後の " 忘れ)で無限ループ
-#            when /\A"(?:[^"\\]+|\\.)*"/
-            when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
-              @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
-            # 行コメント
-            when /\A\/\/.*$/
-              # 読み飛ばすだけ
-            # コメント開始
-            when /\A\/\*/
-              comment = true
-            when /\A>>=/, /\A<<=/, /\A>>/,  /\A<</
-              @q << [$&, Token.new($&, file, lineno, col)]
-            when /\A\+=/, /\A\-=/, /\A\*=/, /\A\/=/, /\A%=/, /\A&=/, /\A\|=/, /\A\^=/
-              @q << [$&, Token.new($&, file, lineno, col)]
-            when /\A::/, /\A==/, /\A!=/, /\A>=/, /\A<=/, /\A\->/, /\A\+\+/, /\A\-\-/
-              @q << [$&, Token.new($&, file, lineno, col)]
-            when /\A./
-              @q << [$&, Token.new($&, file, lineno, col)]
-            else
-              raise
-            end
-          end
-
-          line = $'
-          col += $&.length
-        end
-
-        lineno += 1
-      }
-
-     rescue => evar
-       Generator.error( "B1002 while open or reading \'$1\'" , file )
-       print_exception( evar )
-     end
-    }
-
-    # 終了の印
-    @q << nil
-
-    @yydebug = true
-    do_parse
-
-   ensure
-    @@generator_nest -= 1
-    TECS_LANG::reset_kcode
-   end
-
-  end
-
-
-  def next_token
-    token = @q.shift
-
-    if token then
-      @@current_locale[@@generator_nest] = token[1].locale
-
-      case token[1].val
-      when ";", ":", ",", "(", ")", "{", "}"
-        set_no_type_name false
-      when ".", "->"
-        set_no_type_name true
-      end
-
-      # TYPE_NAME トークンへ置き換え
-      if @b_no_type_name == false
-        if token[0] == :IDENTIFIER && Namespace.is_typename?( token[1].val ) then
-          token[0] = :TYPE_NAME
-          locale = @@current_locale[@@generator_nest]
+	RESERVED = {
+		# keyword
+		'typedef' => :TYPEDEF,
+		'struct' => :STRUCT,
+		'union' => :UNION,
+		'sizeof' => :SIZEOF,
+		'throw' => :THROW,
+
+		# specifier
+		# types
+		'void'    => :VOID,
+		'char'    => :CHAR,
+		'short'   => :SHORT,
+
+		'volatile'=> :VOLATILE,
+		'restrict'=> :RESTRICT,
+		'const'   => :CONST,
+		'extern'   => :EXTERN,
+
+		'long'    => :LONG,
+		'float'   => :FLOAT,
+		'double'  => :DOUBLE,
+		'signed'  => :SIGNED,
+		'unsigned'=> :UNSIGNED,
+
+		'int'     => :INT,
+		'enum'    => :ENUM,
+
+		'if'      => :IF,
+		'else'    => :ELSE,
+		'while'   => :WHILE,
+		'do'      => :DO,
+		'for'     => :FOR,
+		'switch'  => :SWITCH,
+		'case'    => :CASE,
+		'default' => :DEFAULT,
+		'goto'    => :GOTO,
+		'continue' => :CONTINUE,
+		'break'   => :BREAK,
+		'return'  => :RETURN,
+		'__inline__'  => :__INLINE__,
+		'inline'  => :INLINE,
+		'__inline'  => :__INLINE,
+		'Inline'  => :CINLINE,        # inline starting with Capital letter
+		'static'  => :STATIC,
+		'register' => :REGISTER,
+		'auto'    => :AUTO,
+		'__extension__'    => :EXTENSION,
+		'__asm__' => :_ASM,
+		'asm' =>     :_ASM
+
+	}
+
+	@@generator_nest = -1
+	@@generator_stack = []
+	@@current_locale = []
+
+	def finalize
+
+		# mikan Namespace.pop
+		Celltype.pop
+		Cell.pop
+		CompositeCelltype.pop
+		Region.pop
+
+	end
+
+	def set_plugin( plugin )
+		@plugin = plugin
+	end
+
+	def self.get_plugin
+		@@generator_stack[@@generator_nest].get_plugin
+	end
+
+	def get_plugin
+		@plugin
+	end
+
+	def parse(files)
+
+		# mikan Namespace.push
+		Celltype.push
+		Cell.push
+		CompositeCelltype.push
+		Region.push
+
+		@@generator_nest += 1
+		@@generator_stack[@@generator_nest] = self
+		@b_no_type_name = false
+
+	begin
+
+		@q = []
+		comment = false
+#		b_asm   = false
+
+		# euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
+		TECS_LANG::set_kcode_binary
+
+		# 800U, 0xffLL など (整数リテラルに共通の修飾子)
+		integer_qualifier = "([Uu][Ll][Ll]|[Uu][Ll]|[Uu]|[Ll][Ll]|[Ll])?"
+
+		files.each {|file|
+			lineno = 1
+		begin
+#2.0		IO.foreach(file) {|line|
+			TECSIO.foreach(file) {|line|
+			col = 1
+			line.rstrip!
+
+			until line.empty?
+
+				if comment
+					case line
+					# コメント終了
+					when /\A\*\//
+						comment = false
+					when /\A./
+						;
+					end
+				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 進数定数
+					when /\A0x[0-9A-Fa-f]+#{integer_qualifier}/
+						@q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
+					# 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\"       最後の " 忘れ)で無限ループ
+#					when /\A"(?:[^"\\]+|\\.)*"/
+					when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
+						@q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
+					# 行コメント
+					when /\A\/\/.*$/
+						# 読み飛ばすだけ
+					# コメント開始
+					when /\A\/\*/
+						comment = true
+					when /\A>>=/, /\A<<=/, /\A>>/,  /\A<</
+						@q << [$&, Token.new($&, file, lineno, col)]
+					when /\A\+=/, /\A\-=/, /\A\*=/, /\A\/=/, /\A%=/, /\A&=/, /\A\|=/, /\A\^=/
+						@q << [$&, Token.new($&, file, lineno, col)]
+					when /\A::/, /\A==/, /\A!=/, /\A>=/, /\A<=/, /\A\->/, /\A\+\+/, /\A\-\-/
+						@q << [$&, Token.new($&, file, lineno, col)]
+					when /\A\|\|/, /\A\&\&/
+						@q << [$&, Token.new($&, file, lineno, col)]
+					when /\A./
+						@q << [$&, Token.new($&, file, lineno, col)]
+					else
+						raise
+					end
+				end
+
+				line = $'
+				col += $&.length
+			end
+
+			lineno += 1
+		}
+
+		rescue => evar
+			Generator.error( "B1002 while open or reading \'$1\'" , file )
+			print_exception( evar )
+		end
+	}
+
+	# 終了の印
+	@q << nil
+
+	@yydebug = true
+	do_parse
+
+	ensure
+		@@generator_nest -= 1
+		TECS_LANG::reset_kcode
+	end
+
+	end
+
+
+	def next_token
+		token = @q.shift
+
+		if token then
+			@@current_locale[@@generator_nest] = token[1].locale
+
+			case token[1].val
+			when ";", ":", ",", "(", ")", "{", "}"
+			set_no_type_name false
+			when ".", "->"
+			set_no_type_name true
+			end
+
+			# TYPE_NAME トークンへ置き換え
+			if @b_no_type_name == false
+				if token[0] == :IDENTIFIER && Namespace.is_typename?( token[1].val ) then
+					token[0] = :TYPE_NAME
+					locale = @@current_locale[@@generator_nest]
 #print( "#{locale[0]}: line #{locale[1]} : #{token[0]} '#{token[1].val}: type_name'\n" )
-        end
-      end
-
-      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
-        locale = @@current_locale[@@generator_nest]
-        if token then
-          print( "#{locale[0]}: line #{locale[1]} : #{token[0]} '#{token[1].val}'\n" )
-        else
-          print( "#{locale[0]}: line #{locale[1]} : EOF\n" )
-        end
-      end
-    end
-
-    token
-  end
-
-  def on_error(t, v, vstack)
-    if v == "$" then
-     Generator.error( "B1003 Unexpected EOF"  )
-    else
-     Generator.error( "B1004 syntax error near \'$1\'" , v.val )
-    end
-
-  end
-
-  def self.current_locale
-    @@current_locale[ @@generator_nest ]
-  end
-
-  @@n_error = 0
-  @@n_warning = 0
-  @@n_info = 0
-
-  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
-  def self.error( msg )
-    @@n_error += 1
-    locale = @@current_locale[ @@generator_nest ]
-
-    if locale then
-      Console.puts "error: #{locale[0]}: line #{locale[1]} #{msg}"
-    else
-      Console.puts "error: #{msg}"
-    end
-  end
-
-  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
-  def self.warning( msg )
-    @@n_warning += 1
-    locale = @@current_locale[ @@generator_nest ]
-    Console.puts "warning: #{locale[0]}: line #{locale[1]} #{msg}"
-  end
-
-  # このメソッドは構文解析、意味解析からのみ呼出し可
-  def self.info( msg )
-    @@n_info += 1
-    locale = @@current_locale[ @@generator_nest ]
-    Console.puts "info: #{locale[0]}: line #{locale[1]} #{msg}"
-  end
-
-  def self.get_n_error
-    @@n_error
-  end
-
-  def self.get_n_warning
-    @@n_warning
-  end
-
-  def self.get_nest
-    @@generator_nest
-  end
-
-  def set_no_type_name b_no_type_name
-    locale = @@current_locale[ @@generator_nest ]
+				end
+			end
+
+			if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
+				locale = @@current_locale[@@generator_nest]
+				if token then
+					print( "#{locale[0]}: line #{locale[1]} : #{token[0]} '#{token[1].val}'\n" )
+				else
+					print( "#{locale[0]}: line #{locale[1]} : EOF\n" )
+				end
+			end
+		end
+
+		token
+	end
+
+	def on_error(t, v, vstack)
+		if v == "$" then
+			Generator.error( "B1003 Unexpected EOF"  )
+		else
+			Generator.error( "B1004 syntax error near \'$1\'" , v.val )
+		end
+
+	end
+
+	def self.current_locale
+		@@current_locale[ @@generator_nest ]
+	end
+
+	@@n_error = 0
+	@@n_warning = 0
+	@@n_info = 0
+
+	# このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
+	def self.error( msg )
+		@@n_error += 1
+		locale = @@current_locale[ @@generator_nest ]
+
+		if locale then
+			Console.puts "error: #{locale[0]}: line #{locale[1]} #{msg}"
+		else
+			Console.puts "error: #{msg}"
+		end
+	end
+
+	# このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
+	def self.warning( msg )
+		@@n_warning += 1
+		locale = @@current_locale[ @@generator_nest ]
+		Console.puts "warning: #{locale[0]}: line #{locale[1]} #{msg}"
+	end
+
+	# このメソッドは構文解析、意味解析からのみ呼出し可
+	def self.info( msg )
+		@@n_info += 1
+		locale = @@current_locale[ @@generator_nest ]
+		Console.puts "info: #{locale[0]}: line #{locale[1]} #{msg}"
+	end
+
+	def self.get_n_error
+		@@n_error
+	end
+
+	def self.get_n_warning
+		@@n_warning
+	end
+
+	def self.get_nest
+		@@generator_nest
+	end
+
+	def set_no_type_name b_no_type_name
+		locale = @@current_locale[ @@generator_nest ]
 #print "b_no_type_name=#{b_no_type_name} #{locale[0]}: line #{locale[1]}\n"
-    @b_no_type_name = b_no_type_name
-  end
+		@b_no_type_name = b_no_type_name
+	end
 
 ---- footer
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.tab.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.tab.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.tab.rb	(revision 374)
@@ -284,5 +284,5 @@
                   string += line
                   # この位置では error メソッドは使えない (token 読出し前)
-                  puts "error: #{file} line #{lineno}: string literal has newline without escape"
+                  puts "#{file}:#{lineno}:#{col}: error: string literal has newline without escape"
                   @@n_error += 1
                 end
@@ -325,8 +325,9 @@
                   b_in_string = true
                   # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
-                  puts "error: #{file} line #{lineno}: string literal has newline without escape"
+                  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<[0-9A-Za-z_\. \/]+>/   # AB: angle bracke
+                when /\A<(?:[^>\\]|\\.)*>/   # これはうまく行くようだ
                   @q << [:AB_STRING_LITERAL, Token.new($&, file, lineno, col)]
                 # 行コメント
@@ -458,5 +459,5 @@
       end
       if locale then
-        Console.puts "error: #{locale[0]}: line #{locale[1]} #{msg}"
+        Console.puts "#{locale[0]}:#{locale[1]}:#{locale[2]}: error: #{msg}"
       else
         Console.puts "error: #{msg}"
@@ -491,5 +492,5 @@
       end
       if locale then
-        Console.puts "warning: #{locale[0]}: line #{locale[1]} #{msg}"
+        Console.puts "#{locale[0]}:#{locale[1]}:#{locale[2]}: warning: #{msg}"
       else
         Console.puts "warning: #{msg}"
@@ -524,5 +525,5 @@
       end
       if locale then
-        Console.puts "info: #{locale[0]}: line #{locale[1]} #{msg}"
+        Console.puts "#{locale[0]}:#{locale[1]}:#{locale[2]}: info: #{msg}"
       else
         Console.puts "info: #{msg}"
@@ -589,176 +590,176 @@
 
 clist = [
-'66,575,328,666,538,872,78,330,562,328,78,78,78,163,199,200,201,202,203',
-'204,205,207,846,208,678,700,897,135,647,212,213,214,215,216,217,218',
-'679,249,761,711,565,547,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24',
+'66,575,328,559,538,815,78,330,869,328,78,78,78,409,199,200,201,202,203',
+'204,205,207,846,208,678,135,897,135,647,212,213,214,215,216,217,218',
+'249,679,177,872,870,408,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24',
 '25,26,27,28,29,30,31,32,33,34,35,38,465,189,693,333,334,42,43,44,45',
-'46,47,48,49,896,180,644,256,559,177,815,163,135,189,135,135,135,135',
-'189,66,189,189,70,68,69,135,71,72,328,73,78,74,304,305,324,860,901,189',
-'255,162,325,136,327,189,75,75,75,76,77,77,77,135,88,189,189,189,189',
-'79,87,101,80,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28',
-'29,30,31,32,33,34,35,38,78,426,569,668,899,42,43,44,45,46,47,48,49,189',
-'178,189,136,66,136,136,136,136,256,135,446,89,100,78,78,136,328,70,68',
-'69,667,71,72,135,73,571,74,304,305,324,135,135,135,478,868,325,479,327',
-'867,399,75,136,76,89,77,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24',
-'25,26,27,28,29,30,31,32,33,34,35,38,450,48,49,400,839,42,43,44,45,46',
-'47,48,49,135,135,328,838,66,304,305,306,607,307,308,310,311,406,208',
-'78,136,136,70,68,69,401,71,72,797,73,150,74,78,149,136,654,304,305,324',
-'78,796,136,136,136,325,75,327,76,407,77,5,6,7,10,13,14,15,16,17,18,19',
-'20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,835,163,403,661,402',
-'42,43,44,45,46,47,48,49,163,648,826,403,88,697,136,136,432,78,87,681',
-'816,574,89,208,520,720,70,68,69,660,71,72,532,73,196,74,510,636,827',
-'199,200,201,202,203,204,205,207,208,208,75,682,76,135,77,212,213,214',
-'215,216,217,218,304,305,306,889,307,308,310,311,199,200,201,202,203',
-'204,205,207,817,208,635,747,518,135,637,212,213,214,215,216,217,218',
-'529,888,415,199,200,201,202,203,204,205,207,341,208,342,528,343,135',
-'234,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,414',
-'208,270,878,235,135,719,212,213,214,215,216,217,218,525,277,589,504',
-'691,314,180,136,582,590,721,581,199,200,201,202,203,204,205,207,879',
-'208,720,587,163,135,776,212,213,214,215,216,217,218,503,690,313,136',
-'199,200,201,202,203,204,205,207,264,208,523,698,282,135,770,212,213',
-'214,215,216,217,218,347,582,136,275,581,348,349,898,180,850,199,200',
-'201,202,203,204,205,207,163,208,699,283,91,135,136,212,213,214,215,216',
-'217,218,199,200,201,202,203,204,205,207,851,208,722,833,691,135,162',
-'212,213,214,215,216,217,218,630,163,88,887,136,902,478,886,87,479,347',
-'859,89,163,409,348,349,88,631,699,832,794,903,87,904,234,592,89,629',
-'170,136,199,200,201,202,203,204,205,207,858,208,564,408,90,135,235,212',
-'213,214,215,216,217,218,522,199,200,201,202,203,204,205,207,136,208',
-'521,150,906,135,149,212,213,214,215,216,217,218,199,200,201,202,203',
-'204,205,207,136,208,394,395,396,135,360,212,213,214,215,216,217,218',
-'199,200,201,202,203,204,205,207,361,208,394,395,396,135,362,212,213',
-'214,215,216,217,218,145,146,363,199,200,201,202,203,204,205,207,437',
-'208,287,288,454,135,136,212,213,214,215,216,217,218,234,354,355,356',
-'357,591,436,438,439,440,441,456,457,458,455,136,347,350,351,515,235',
-'348,349,199,200,201,202,203,204,205,207,907,208,352,353,514,135,136',
-'212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,513,208',
-'358,359,512,135,136,212,213,214,215,216,217,218,364,365,511,199,200',
-'201,202,203,204,205,207,208,208,404,336,482,135,136,212,213,214,215',
-'216,217,218,199,200,201,202,203,204,205,207,481,208,517,518,474,135',
-'473,212,213,214,215,216,217,218,472,199,200,201,202,203,204,205,207',
-'470,208,350,351,463,135,136,212,213,214,215,216,217,218,350,351,234',
-'354,355,356,357,607,454,737,738,740,741,437,136,88,352,353,196,739,785',
-'87,235,608,234,89,610,743,742,456,457,458,455,436,438,439,440,441,611',
-'136,354,355,356,357,235,352,353,199,200,201,202,203,204,205,207,336',
-'208,352,353,612,135,136,212,213,214,215,216,217,218,614,199,200,201',
-'202,203,204,205,207,472,208,352,353,615,135,136,212,213,214,215,216',
-'217,218,199,200,201,202,203,204,205,207,616,208,358,359,617,135,618',
-'212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,208,208',
-'594,336,908,135,621,212,213,214,215,216,217,218,620,288,163,199,200',
-'201,202,203,204,205,207,462,208,787,788,459,135,136,212,213,214,215',
-'216,217,218,625,199,200,201,202,203,204,205,207,448,208,789,790,445',
+'46,47,48,49,896,88,644,406,666,761,711,87,135,871,135,135,135,135,189',
+'66,189,189,70,68,69,135,71,72,328,73,78,74,304,305,324,860,901,189,407',
+'136,325,136,327,189,75,75,75,76,77,77,77,135,874,178,189,189,189,79',
+'875,101,80,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28',
+'29,30,31,32,33,34,35,38,78,364,365,256,899,42,43,44,45,46,47,48,49,189',
+'189,189,136,66,136,136,136,136,878,135,135,89,100,78,78,136,328,70,68',
+'69,399,71,72,135,73,877,74,304,305,324,135,446,135,478,868,325,479,327',
+'867,879,75,136,76,89,77,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24',
+'25,26,27,28,29,30,31,32,33,34,35,38,450,48,49,314,838,42,43,44,45,46',
+'47,48,49,135,135,839,135,66,304,305,306,135,307,308,310,311,691,838',
+'78,136,136,70,68,69,313,71,72,275,73,880,74,78,180,136,816,304,305,324',
+'78,881,136,136,136,325,75,327,76,690,77,5,6,7,10,13,14,15,16,17,18,19',
+'20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,835,426,403,282,697',
+'42,43,44,45,46,47,48,49,163,817,163,620,288,277,136,136,432,136,180',
+'504,78,150,136,654,149,720,70,68,69,283,71,72,403,73,402,74,520,636',
+'162,199,200,201,202,203,204,205,207,328,208,75,503,76,135,77,212,213',
+'214,215,216,217,218,304,305,306,859,307,308,310,311,199,200,201,202',
+'203,204,205,207,889,208,635,648,883,135,637,212,213,214,215,216,217',
+'218,884,858,681,199,200,201,202,203,204,205,207,341,208,342,888,343',
+'135,234,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207',
+'682,208,885,668,235,135,661,212,213,214,215,216,217,218,88,789,790,691',
+'256,400,87,136,150,890,89,149,199,200,201,202,203,204,205,207,667,208',
+'891,660,163,135,776,212,213,214,215,216,217,218,794,255,401,136,199',
+'200,201,202,203,204,205,207,892,208,719,415,850,135,162,212,213,214',
+'215,216,217,218,887,898,136,902,886,582,721,903,581,833,199,200,201',
+'202,203,204,205,207,720,208,414,851,904,135,136,212,213,214,215,216',
+'217,218,199,200,201,202,203,204,205,207,832,208,722,698,826,135,906',
+'212,213,214,215,216,217,218,163,163,88,478,136,907,479,582,87,908,581',
+'607,89,163,3,163,88,910,827,699,699,81,87,352,353,234,89,797,170,770',
+'136,199,200,201,202,203,204,205,207,796,208,547,587,564,135,235,212',
+'213,214,215,216,217,218,90,199,200,201,202,203,204,205,207,136,208,394',
+'395,396,135,91,212,213,214,215,216,217,218,199,200,201,202,203,204,205',
+'207,136,208,394,395,396,135,92,212,213,214,215,216,217,218,199,200,201',
+'202,203,204,205,207,163,208,350,351,96,135,124,212,213,214,215,216,217',
+'218,594,336,125,199,200,201,202,203,204,205,207,126,208,130,510,132',
+'135,136,212,213,214,215,216,217,218,134,199,200,201,202,203,204,205',
+'207,140,208,352,353,142,135,136,212,213,214,215,216,217,218,199,200',
+'201,202,203,204,205,207,143,208,404,336,144,135,136,212,213,214,215',
+'216,217,218,199,200,201,202,203,204,205,207,147,208,358,359,155,135',
+'136,212,213,214,215,216,217,218,350,351,156,199,200,201,202,203,204',
+'205,207,159,208,350,351,160,135,136,212,213,214,215,216,217,218,164',
+'199,200,201,202,203,204,205,207,165,208,358,359,166,135,136,212,213',
+'214,215,216,217,218,199,200,201,202,203,204,205,207,167,208,630,437',
+'168,135,136,212,213,214,215,216,217,218,352,353,234,747,518,171,631',
+'287,288,436,438,439,440,441,136,347,629,172,347,173,348,349,235,348',
+'349,199,200,201,202,203,204,205,207,174,208,352,353,175,135,136,212',
+'213,214,215,216,217,218,176,199,200,201,202,203,204,205,207,180,208',
+'184,772,185,135,136,212,213,214,215,216,217,218,199,200,201,202,203',
+'204,205,207,454,208,145,146,186,135,136,212,213,214,215,216,217,218',
+'347,187,234,517,518,348,349,456,457,458,455,199,200,201,202,203,204',
+'205,207,454,208,188,235,189,135,191,212,213,214,215,216,217,218,354',
+'355,356,357,787,788,136,456,457,458,455,354,355,356,357,199,200,201',
+'202,203,204,205,207,437,208,382,383,384,135,136,212,213,214,215,216',
+'217,218,377,378,379,380,381,385,436,438,439,440,441,304,305,306,136',
+'307,308,310,311,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27',
+'28,29,30,31,32,33,34,35,38,136,354,355,356,357,42,43,44,45,46,47,48',
+'49,199,200,201,202,203,204,205,207,192,208,352,353,193,135,196,212,213',
+'214,215,216,217,218,247,89,136,199,200,201,202,203,204,205,207,257,208',
+'159,264,208,135,270,212,213,214,215,216,217,218,199,200,201,202,203',
+'204,205,207,180,208,272,279,280,135,281,212,213,214,215,216,217,218',
+'234,284,285,286,289,290,199,200,201,202,203,204,205,207,312,208,335',
+'189,336,135,235,212,213,214,215,216,217,218,360,199,200,201,202,203',
+'204,205,207,136,208,361,670,362,135,363,212,213,214,215,216,217,218',
+'199,200,201,202,203,204,205,207,368,208,369,136,371,135,372,212,213',
+'214,215,216,217,218,159,199,200,201,202,203,204,205,207,405,208,136',
+'587,410,135,142,212,213,214,215,216,217,218,412,413,199,200,201,202',
+'203,204,205,207,416,208,417,418,419,135,136,212,213,214,215,216,217',
+'218,420,199,200,201,202,203,204,205,207,421,208,444,445,448,135,136',
+'212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,459,208',
+'462,772,463,135,136,212,213,214,215,216,217,218,470,88,234,88,382,383',
+'384,87,472,87,473,89,474,89,481,136,377,378,379,380,381,385,235,482',
+'208,199,200,201,202,203,204,205,207,511,208,512,513,514,135,136,212',
+'213,214,215,216,217,218,515,199,200,201,202,203,204,205,207,521,208',
+'522,523,264,135,136,212,213,214,215,216,217,218,199,200,201,202,203',
+'204,205,207,525,208,270,528,529,135,136,212,213,214,215,216,217,218',
+'199,200,201,202,203,204,205,207,208,208,532,208,208,135,180,212,213',
+'214,215,216,217,218,536,537,540,199,200,201,202,203,204,205,207,541',
+'208,542,544,545,135,136,212,213,214,215,216,217,218,737,738,740,741',
+'548,189,270,558,562,196,739,737,738,740,741,136,565,189,743,742,196',
+'739,234,592,569,88,88,571,88,743,742,87,87,88,87,89,89,136,89,87,328',
+'574,235,89,196,199,200,201,202,203,204,205,207,589,208,590,700,360,135',
+'136,212,213,214,215,216,217,218,361,362,472,199,200,201,202,203,204',
+'205,207,363,208,472,591,607,135,136,212,213,214,215,216,217,218,199',
+'200,201,202,203,204,205,207,608,208,611,336,612,135,614,212,213,214',
+'215,216,217,218,199,200,201,202,203,204,205,207,615,208,616,617,618',
+'135,208,212,213,214,215,216,217,218,621,737,738,740,741,163,625,88,88',
+'641,196,739,785,87,87,136,643,89,89,743,742,625,662,663,669,674,199',
+'200,201,202,203,204,205,207,675,208,676,680,683,135,136,212,213,214',
+'215,216,217,218,199,200,201,202,203,204,205,207,685,208,686,687,688',
+'135,136,212,213,214,215,216,217,218,472,104,105,106,107,108,109,110',
+'111,112,113,114,689,189,136,692,208,695,704,5,6,7,10,13,14,15,16,17',
+'18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,163,706,707',
+'708,163,42,43,44,45,46,47,48,49,710,712,136,117,118,119,120,121,122',
+'123,199,200,201,202,203,204,205,207,713,208,714,715,718,135,136,212',
+'213,214,215,216,217,218,199,200,201,202,203,204,205,207,723,208,726',
+'571,75,135,729,212,213,214,215,216,217,218,199,200,201,202,203,204,205',
+'207,730,208,196,744,745,135,748,212,213,214,215,216,217,218,199,200',
+'201,202,203,204,205,207,749,208,752,753,754,135,756,212,213,214,215',
+'216,217,218,625,759,760,764,199,200,201,202,203,204,205,207,767,208',
+'771,779,780,135,136,212,213,214,215,216,217,218,199,200,201,202,203',
+'204,205,207,782,208,783,791,793,135,136,212,213,214,215,216,217,218',
+'199,200,201,202,203,204,205,207,189,208,795,798,799,135,136,212,213',
+'214,215,216,217,218,199,200,201,202,203,204,205,207,800,208,803,804',
+'805,135,136,212,213,214,215,216,217,218,806,654,718,180,199,200,201',
+'202,203,204,205,207,811,208,812,813,814,135,136,212,213,214,215,216',
+'217,218,199,200,201,202,203,204,205,207,726,208,823,828,831,135,136',
+'212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,836,208',
+'840,841,-386,135,136,212,213,214,215,216,217,218,199,200,201,202,203',
+'204,205,207,842,208,843,237,844,135,136,212,213,214,215,216,217,218',
+'848,803,208,854,199,200,201,202,203,204,205,207,857,208,862,863,865',
 '135,136,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207',
-'444,208,421,772,641,135,136,212,213,214,215,216,217,218,88,88,234,382',
-'383,384,87,87,420,643,89,89,419,418,136,377,378,379,380,381,385,417',
-'235,416,625,199,200,201,202,203,204,205,207,413,208,412,662,663,135',
-'136,212,213,214,215,216,217,218,142,199,200,201,202,203,204,205,207',
-'410,208,405,159,669,135,136,212,213,214,215,216,217,218,199,200,201',
-'202,203,204,205,207,372,208,371,369,674,135,136,212,213,214,215,216',
-'217,218,199,200,201,202,203,204,205,207,368,208,675,237,676,135,363',
-'212,213,214,215,216,217,218,304,305,306,234,307,308,310,311,362,199',
-'200,201,202,203,204,205,207,136,208,361,680,360,135,235,212,213,214',
-'215,216,217,218,683,199,200,201,202,203,204,205,207,136,208,336,685',
-'686,135,687,212,213,214,215,216,217,218,199,200,201,202,203,204,205',
-'207,136,208,688,689,189,135,692,212,213,214,215,216,217,218,199,200',
-'201,202,203,204,205,207,136,208,335,208,695,135,312,212,213,214,215',
-'216,217,218,290,289,286,199,200,201,202,203,204,205,207,285,208,704',
-'163,706,135,136,212,213,214,215,216,217,218,737,738,740,741,707,708',
-'88,88,163,196,739,710,87,87,284,136,89,89,743,742,712,713,714,199,200',
-'201,202,203,204,205,207,715,208,718,281,280,135,136,212,213,214,215',
-'216,217,218,199,200,201,202,203,204,205,207,723,208,726,571,75,135,136',
-'212,213,214,215,216,217,218,729,730,472,20,21,22,23,24,25,26,27,28,29',
-'30,31,32,33,136,196,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25',
-'26,27,28,29,30,31,32,33,34,35,38,279,744,745,272,3,42,43,44,45,46,47',
-'48,49,748,749,136,117,118,119,120,121,122,123,199,200,201,202,203,204',
-'205,207,750,208,610,752,753,135,136,212,213,214,215,216,217,218,199',
-'200,201,202,203,204,205,207,754,208,180,756,625,135,759,212,213,214',
-'215,216,217,218,199,200,201,202,203,204,205,207,760,208,270,208,264',
-'135,764,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207',
-'159,208,257,767,89,135,247,212,213,214,215,216,217,218,771,196,193,192',
-'199,200,201,202,203,204,205,207,779,208,780,191,782,135,136,212,213',
-'214,215,216,217,218,199,200,201,202,203,204,205,207,783,208,189,81,910',
-'135,136,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207',
-'791,208,188,793,187,135,136,212,213,214,215,216,217,218,199,200,201',
-'202,203,204,205,207,795,208,186,670,798,135,136,212,213,214,215,216',
-'217,218,799,800,803,804,199,200,201,202,203,204,205,207,805,208,806',
-'654,718,135,136,212,213,214,215,216,217,218,737,738,740,741,180,88,88',
-'88,811,196,739,87,87,87,136,89,89,89,743,742,812,813,199,200,201,202',
-'203,204,205,207,814,208,185,184,726,135,136,212,213,214,215,216,217',
-'218,199,200,201,202,203,204,205,207,823,208,180,176,175,135,136,212',
-'213,214,215,216,217,218,382,383,384,472,117,118,119,120,121,122,123',
-'828,377,378,379,380,381,385,136,5,6,7,10,13,14,15,16,17,18,19,20,21',
-'22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,174,173,831,172,171,42',
-'43,44,45,46,47,48,49,168,836,136,167,166,840,841,-386,842,843,199,200',
-'201,202,203,204,205,207,844,208,165,164,160,135,136,212,213,214,215',
-'216,217,218,199,200,201,202,203,204,205,345,848,208,803,159,156,135',
-'208,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,854',
-'208,155,147,857,135,144,212,213,214,215,216,217,218,199,200,201,202',
-'203,204,205,207,143,208,862,863,142,135,865,212,213,214,215,216,217',
-'218,140,869,870,871,199,200,201,202,203,204,205,207,134,208,132,874',
-'875,135,136,212,213,214,215,216,217,218,199,200,201,202,203,204,205',
-'207,130,208,877,126,838,135,136,212,213,214,215,216,217,218,199,200',
-'201,202,203,204,205,207,880,208,881,587,328,135,136,212,213,214,215',
-'216,217,218,199,200,201,202,203,204,205,207,883,208,884,885,125,135',
-'136,212,213,214,215,216,217,218,124,890,891,234,104,105,106,107,108',
-'109,110,111,112,113,114,88,892,96,136,92,544,87,545,235,542,89,199,200',
-'201,202,203,204,205,207,548,208,189,270,541,135,136,212,213,214,215',
-'216,217,218,199,200,201,202,203,204,205,207,540,208,558,537,536,135',
-'136,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,,208',
-',,,135,136,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207',
-',208,,,,135,,212,213,214,215,216,217,218,,,,,199,200,201,202,203,204',
-'205,207,,208,,772,,135,136,212,213,214,215,216,217,218,199,200,201,202',
-'203,204,205,207,,208,,,,135,136,212,213,214,215,216,217,218,199,200',
-'201,202,203,204,205,207,,208,,,,135,136,212,213,214,215,216,217,218',
-'199,200,201,202,203,204,205,207,,208,,,,135,136,212,213,214,215,216',
-'217,218,,,,,199,200,201,202,203,204,205,207,,208,,,,135,136,212,213',
-'214,215,216,217,218,199,200,201,202,203,204,205,207,,208,,,,135,136',
-'212,213,214,215,216,217,218,737,738,740,741,,88,,,,196,739,87,,,136',
-'89,,,743,742,,,,,,,,,,,,,,,,,136,104,105,106,107,108,109,110,111,112',
-'113,114,,,,478,585,,584,,,,,,,89,136,,,,,,,472,,,,,,117,118,119,120',
-'121,122,123,,,136,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26',
-'27,28,29,30,31,32,33,34,35,38,241,,78,,,42,43,44,45,46,47,48,49,,,,',
-',,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27',
-'28,29,30,31,32,33,34,35,38,672,,78,,,42,43,44,45,46,47,48,49,,,,,,,',
-',,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28',
+',208,,,,135,136,212,213,214,215,216,217,218,199,200,201,202,203,204',
+'205,207,,208,,,,135,136,212,213,214,215,216,217,218,199,200,201,202',
+'203,204,205,207,,208,,,,135,136,212,213,214,215,216,217,218,88,,,,,',
+'87,,,88,89,737,738,740,741,87,,,136,89,196,739,,,,234,,,,743,742,117',
+'118,119,120,121,122,123,,,136,,,,,235,,,199,200,201,202,203,204,205',
+'207,,208,,,,135,136,212,213,214,215,216,217,218,199,200,201,202,203',
+'204,205,207,,208,472,,,135,136,212,213,214,215,216,217,218,199,200,201',
+'202,203,204,205,345,,208,,,,135,,212,213,214,215,216,217,218,199,200',
+'201,202,203,204,205,207,,208,,,,135,,212,213,214,215,216,217,218,,,',
+'104,105,106,107,108,109,110,111,112,113,114,,,,,136,,,,,,,104,105,106',
+'107,108,109,110,111,112,113,114,,,,,136,117,118,119,120,121,122,123',
+',,,478,585,,584,,,,,,,89,136,117,118,119,120,121,122,123,20,21,22,23',
+'24,25,26,27,28,29,30,31,32,33,136,5,6,7,10,13,14,15,16,17,18,19,20,21',
+'22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,672,,78,,,42,43,44,45,46',
+'47,48,49,,,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22',
+'23,24,25,26,27,28,29,30,31,32,33,34,35,38,241,,78,,,42,43,44,45,46,47',
+'48,49,,,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23',
+'24,25,26,27,28,29,30,31,32,33,34,35,38,78,,,,,42,43,44,45,46,47,48,49',
+',,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26',
+'27,28,29,30,31,32,33,34,35,38,78,,,,,42,43,44,45,46,47,48,49,506,,,',
+',,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27',
+'28,29,30,31,32,33,34,35,38,78,428,,,,42,43,44,45,46,47,48,49,,,,,,,',
+',,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28',
 '29,30,31,32,33,34,35,38,78,,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,',
 ',,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30',
-'31,32,33,34,35,38,78,,,,,42,43,44,45,46,47,48,49,506,,,,,,,,,,,,,,,',
-',,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31',
-'32,33,34,35,38,78,,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6',
-'7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33',
-'34,35,38,78,,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13',
-'14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38',
-'78,428,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15',
-'16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,78,,',
-',,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17',
-'18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,78,387,,,,42',
+'31,32,33,34,35,38,78,,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5',
+'6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33',
+'34,35,38,78,632,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10',
+'13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35',
+'38,78,638,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14',
+'15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,128',
+'658,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16',
+'17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,78,,,,,42',
 '43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19',
-'20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,78,,,,,42,43,44,45',
-'46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22',
-'23,24,25,26,27,28,29,30,31,32,33,34,35,38,78,,,,,42,43,44,45,46,47,48',
-'49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25',
-'26,27,28,29,30,31,32,33,34,35,38,128,516,,,,42,43,44,45,46,47,48,49',
+'20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,78,516,,,,42,43,44',
+'45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21',
+'22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,78,,,,,42,43,44,45,46,47',
+'48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24',
+'25,26,27,28,29,30,31,32,33,34,35,38,78,387,,,,42,43,44,45,46,47,48,49',
 ',,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26',
 '27,28,29,30,31,32,33,34,35,38,78,,,,,42,43,44,45,46,47,48,49,,,,,,,',
 ',,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28',
-'29,30,31,32,33,34,35,38,78,632,,,,42,43,44,45,46,47,48,49,,,,,,,,,,',
-',,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29',
-'30,31,32,33,34,35,38,78,638,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,',
-',,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30',
-'31,32,33,34,35,38,,658,,,,42,43,44,45,46,47,48,49,104,105,106,107,108',
-'109,110,111,112,113,114,,,,,,,,,,,,,,,,,,,,,,,,,,,,117,118,119,120,121',
-'122,123,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29',
-'30,31,32,33,34,35,38,,,,,,42,43,44,45,46,47,48,49,5,6,7,10,13,14,15',
-'16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,,,,,',
-'42,43,44,45,46,47,48,49,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24',
-'25,26,27,28,29,30,31,32,33,34,35,38,,,,,,42,43,44,45,46,47,48,49,5,6',
-'7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33',
-'34,35,38,,,,,,42,43,44,45,46,47,48,49,5,6,7,10,13,14,15,16,17,18,19',
-'20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,,,,,,42,43,44,45',
-'46,47,48,49,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28',
 '29,30,31,32,33,34,35,38,,,,,,42,43,44,45,46,47,48,49,5,6,7,10,13,14',
 '15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,,',
 ',,,42,43,44,45,46,47,48,49,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23',
-'24,25,26,27,28,29,30,31,32,33,34,35,38,,,,,,42,43,44,45,46,47' ]
-        racc_action_table = arr = ::Array.new(3623, nil)
+'24,25,26,27,28,29,30,31,32,33,34,35,38,,,,,,42,43,44,45,46,47,48,49',
+'5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32',
+'33,34,35,38,,,,,,42,43,44,45,46,47,48,49,5,6,7,10,13,14,15,16,17,18',
+'19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,,,,,,42,43,44',
+'45,46,47,48,49,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27',
+'28,29,30,31,32,33,34,35,38,,,,,,42,43,44,45,46,47,48,49,5,6,7,10,13',
+'14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38',
+',,,,,42,43,44,45,46,47,48,49,5,6,7,10,13,14,15,16,17,18,19,20,21,22',
+'23,24,25,26,27,28,29,30,31,32,33,34,35,38,,,,,,42,43,44,45,46,47,48',
+'49,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31',
+'32,33,34,35,38,,,,,,42,43,44,45,46,47' ]
+        racc_action_table = arr = ::Array.new(3593, nil)
         idx = 0
         clist.each do |str|
@@ -770,192 +771,192 @@
 
 clist = [
-'2,469,843,576,422,856,192,194,450,192,329,2,613,434,630,630,630,630',
-'630,630,630,630,824,630,596,630,893,630,560,630,630,630,630,630,630',
-'630,597,154,703,642,454,434,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2',
-'2,2,2,2,2,2,2,2,329,422,613,194,194,2,2,2,2,2,2,2,2,893,414,560,157',
-'447,125,777,573,721,460,558,631,303,470,576,291,856,469,2,2,2,839,2',
-'2,563,2,291,2,192,192,192,843,895,824,157,573,192,630,192,596,329,2',
-'613,2,329,2,613,782,85,703,642,597,154,2,85,41,2,291,291,291,291,291',
+'2,469,843,447,422,777,192,194,852,192,329,2,613,269,515,515,515,515',
+'515,515,515,515,824,515,596,325,893,515,560,515,515,515,515,515,515',
+'515,154,597,125,856,853,269,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2',
+'2,2,2,2,2,2,2,2,329,422,613,194,194,2,2,2,2,2,2,2,2,893,85,560,267,576',
+'703,642,85,721,855,631,558,528,511,447,161,777,469,2,2,2,92,2,2,563',
+'2,161,2,192,192,192,843,895,824,267,325,192,515,192,596,329,2,613,2',
+'329,2,613,75,860,125,856,154,597,2,861,41,2,161,161,161,161,161,161',
+'161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161',
+'161,161,161,161,161,187,230,230,258,895,161,161,161,161,161,161,161',
+'161,576,703,642,721,185,631,558,528,511,866,691,303,89,41,315,185,92',
+'315,161,161,161,258,161,161,333,161,863,161,563,563,563,286,308,782',
+'340,851,563,340,563,851,866,161,75,161,340,161,185,185,185,185,185,185',
+'185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185',
+'185,185,185,185,185,315,89,89,190,869,185,185,185,185,185,185,185,185',
+'839,470,812,692,291,187,187,187,512,187,187,187,187,609,812,291,691',
+'303,185,185,185,190,185,185,171,185,872,185,778,171,333,778,315,315',
+'315,294,873,286,308,782,315,185,315,185,609,185,291,291,291,291,291',
 '291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291',
-'291,291,291,291,291,291,187,291,461,577,895,291,291,291,291,291,291',
-'291,291,447,125,777,721,185,558,631,303,470,258,286,308,89,41,315,185',
-'839,315,291,291,291,577,291,291,92,291,462,291,563,563,563,512,75,325',
-'340,851,563,340,563,851,258,291,782,291,340,291,185,185,185,185,185',
-'185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185',
-'185,185,185,185,185,185,315,89,89,262,812,185,185,185,185,185,185,185',
-'185,511,333,463,812,161,187,187,187,756,187,187,187,187,267,413,161',
-'286,308,185,185,185,262,185,185,756,185,148,185,561,148,92,561,315,315',
-'315,294,756,512,75,325,315,185,315,185,267,185,161,161,161,161,161,161',
-'161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161',
-'161,161,161,161,161,808,392,264,568,264,161,161,161,161,161,161,161',
-'161,375,561,784,625,127,625,511,333,294,778,127,599,778,465,127,412',
-'392,808,161,161,161,568,161,161,411,161,472,161,375,553,784,720,720',
-'720,720,720,720,720,720,410,720,161,599,161,720,161,720,720,720,720',
-'720,720,720,294,294,294,880,294,294,294,294,257,257,257,257,257,257',
-'257,257,778,257,553,684,684,257,553,257,257,257,257,257,257,257,409',
-'880,278,474,474,474,474,474,474,474,474,210,474,210,408,210,474,720',
-'474,474,474,474,474,474,474,403,403,403,403,403,403,403,403,278,403',
-'407,866,720,403,653,403,403,403,403,403,403,403,402,172,480,366,609',
-'190,172,720,580,483,653,580,479,479,479,479,479,479,479,479,866,479',
-'653,479,716,479,720,479,479,479,479,479,479,479,366,609,190,257,889',
-'889,889,889,889,889,889,889,401,889,396,626,176,889,716,889,889,889',
-'889,889,889,889,488,477,474,171,477,488,488,894,171,834,504,504,504',
-'504,504,504,504,504,102,504,626,176,9,504,403,504,504,504,504,504,504',
-'504,862,862,862,862,862,862,862,862,834,862,657,801,751,862,102,862',
-'862,862,862,862,862,862,549,115,253,879,479,897,476,879,253,476,221',
-'841,253,452,269,221,221,88,549,657,801,751,898,88,901,504,504,88,549',
-'115,889,859,859,859,859,859,859,859,859,841,859,452,269,8,859,504,859',
-'859,859,859,859,859,859,395,513,513,513,513,513,513,513,513,504,513',
-'394,86,904,513,86,513,513,513,513,513,513,513,848,848,848,848,848,848',
-'848,848,862,848,254,254,254,848,498,848,848,848,848,848,848,848,359',
-'359,359,359,359,359,359,359,499,359,520,520,520,359,500,359,359,359',
-'359,359,359,359,82,82,501,358,358,358,358,358,358,358,358,547,358,181',
-'181,564,358,859,358,358,358,358,358,358,358,848,496,496,496,496,502',
-'547,547,547,547,547,564,564,564,564,513,487,222,222,384,848,487,487',
-'806,806,806,806,806,806,806,806,905,806,223,223,383,806,848,806,806',
-'806,806,806,806,806,357,357,357,357,357,357,357,357,382,357,225,225',
-'381,357,359,357,357,357,357,357,357,357,230,230,380,797,797,797,797',
-'797,797,797,797,368,797,265,265,343,797,358,797,797,797,797,797,797',
-'797,796,796,796,796,796,796,796,796,342,796,389,389,338,796,337,796',
-'796,796,796,796,796,796,335,356,356,356,356,356,356,356,356,334,356',
-'489,489,327,356,806,356,356,356,356,356,356,356,490,490,797,495,495',
-'495,495,525,318,739,739,739,739,297,357,696,491,491,739,739,739,696',
-'797,526,796,696,528,739,739,318,318,318,318,297,297,297,297,297,529',
-'797,224,224,224,224,796,492,492,355,355,355,355,355,355,355,355,530',
-'355,493,493,531,355,796,355,355,355,355,355,355,355,533,354,354,354',
-'354,354,354,354,354,739,354,494,494,534,354,356,354,354,354,354,354',
-'354,354,353,353,353,353,353,353,353,353,535,353,497,497,536,353,537',
-'353,353,353,353,353,353,353,352,352,352,352,352,352,352,352,538,352',
-'505,505,906,352,543,352,352,352,352,352,352,352,539,539,544,748,748',
-'748,748,748,748,748,748,326,748,742,742,324,748,355,748,748,748,748',
-'748,748,748,548,729,729,729,729,729,729,729,729,309,729,743,743,307',
-'729,354,729,729,729,729,729,729,729,719,719,719,719,719,719,719,719',
-'306,719,285,719,557,719,353,719,719,719,719,719,719,719,430,602,748',
-'246,246,246,430,602,284,559,430,602,283,282,352,246,246,246,246,246',
-'246,281,748,280,565,351,351,351,351,351,351,351,351,276,351,274,570',
-'572,351,748,351,351,351,351,351,351,351,272,147,147,147,147,147,147',
-'147,147,271,147,266,256,578,147,729,147,147,147,147,147,147,147,350',
-'350,350,350,350,350,350,350,242,350,240,236,583,350,719,350,350,350',
-'350,350,350,350,149,149,149,149,149,149,149,149,235,149,586,149,588',
-'149,229,149,149,149,149,149,149,149,546,546,546,147,546,546,546,546',
-'228,349,349,349,349,349,349,349,349,351,349,227,598,226,349,147,349',
-'349,349,349,349,349,349,600,714,714,714,714,714,714,714,714,147,714',
-'206,604,605,714,606,714,714,714,714,714,714,714,348,348,348,348,348',
-'348,348,348,350,348,607,608,198,348,611,348,348,348,348,348,348,348',
-'710,710,710,710,710,710,710,710,149,710,195,616,619,710,189,710,710',
-'710,710,710,710,710,184,183,179,347,347,347,347,347,347,347,347,178',
-'347,632,634,636,347,349,347,347,347,347,347,347,347,827,827,827,827',
-'637,638,373,288,640,827,827,641,373,288,177,714,373,288,827,827,643',
-'644,646,706,706,706,706,706,706,706,706,648,706,651,175,174,706,348',
-'706,706,706,706,706,706,706,345,345,345,345,345,345,345,345,658,345',
-'662,663,664,345,710,345,345,345,345,345,345,345,665,666,827,36,36,36',
-'36,36,36,36,36,36,36,36,36,36,36,347,668,345,345,345,345,345,345,345',
-'345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345',
-'345,345,345,345,173,671,673,169,1,345,345,345,345,345,345,345,345,688',
-'689,706,260,260,260,260,260,260,260,515,515,515,515,515,515,515,515',
-'691,515,692,693,694,515,345,515,515,515,515,515,515,515,166,166,166',
-'166,166,166,166,166,695,166,168,697,699,166,700,166,166,166,166,166',
-'166,166,341,341,341,341,341,341,341,341,701,341,167,165,164,341,707',
-'341,341,341,341,341,341,341,682,682,682,682,682,682,682,682,160,682',
-'159,711,152,682,151,682,682,682,682,682,682,682,718,144,141,139,521',
-'521,521,521,521,521,521,521,725,521,727,138,730,521,515,521,521,521',
-'521,521,521,521,522,522,522,522,522,522,522,522,731,522,137,3,909,522',
-'166,522,522,522,522,522,522,522,523,523,523,523,523,523,523,523,746',
-'523,136,749,133,523,341,523,523,523,523,523,523,523,581,581,581,581',
-'581,581,581,581,755,581,131,581,760,581,682,581,581,581,581,581,581',
-'581,761,763,764,766,908,908,908,908,908,908,908,908,767,908,768,769',
-'770,908,521,908,908,908,908,908,908,908,783,783,783,783,771,146,518',
-'245,772,783,783,146,518,245,522,146,518,245,783,783,773,775,290,290',
-'290,290,290,290,290,290,776,290,129,128,780,290,523,290,290,290,290',
-'290,290,290,207,207,207,207,207,207,207,207,781,207,126,124,123,207',
-'581,207,207,207,207,207,207,207,510,510,510,783,170,170,170,170,170',
-'170,170,793,510,510,510,510,510,510,908,207,207,207,207,207,207,207',
+'291,291,291,291,291,291,808,291,625,176,625,291,291,291,291,291,291',
+'291,291,392,778,573,539,539,172,839,470,294,692,172,366,561,86,512,561',
+'86,808,291,291,291,176,291,291,264,291,264,291,392,553,573,720,720,720',
+'720,720,720,720,720,874,720,291,366,291,720,291,720,720,720,720,720',
+'720,720,294,294,294,841,294,294,294,294,902,902,902,902,902,902,902',
+'902,880,902,553,561,876,902,553,902,902,902,902,902,902,902,877,841',
+'599,889,889,889,889,889,889,889,889,210,889,210,880,210,889,720,889',
+'889,889,889,889,889,889,521,521,521,521,521,521,521,521,599,521,878',
+'577,720,521,568,521,521,521,521,521,521,521,430,743,743,751,157,262',
+'430,720,148,881,430,148,522,522,522,522,522,522,522,522,577,522,882',
+'568,102,522,720,522,522,522,522,522,522,522,751,157,262,902,523,523',
+'523,523,523,523,523,523,883,523,653,278,834,523,102,523,523,523,523',
+'523,523,523,879,894,889,897,879,580,653,898,580,801,234,234,234,234',
+'234,234,234,234,653,234,278,834,901,234,521,234,234,234,234,234,234',
+'234,166,166,166,166,166,166,166,166,801,166,657,626,784,166,904,166',
+'166,166,166,166,166,166,115,716,518,476,522,905,476,477,518,906,477',
+'756,518,434,1,452,127,909,784,657,626,3,127,494,494,234,127,756,115',
+'716,523,479,479,479,479,479,479,479,479,756,479,434,479,452,479,234',
+'479,479,479,479,479,479,479,8,358,358,358,358,358,358,358,358,234,358',
+'520,520,520,358,9,358,358,358,358,358,358,358,363,363,363,363,363,363',
+'363,363,166,363,254,254,254,363,16,363,363,363,363,363,363,363,360,360',
+'360,360,360,360,360,360,375,360,222,222,38,360,68,360,360,360,360,360',
+'360,360,505,505,69,361,361,361,361,361,361,361,361,70,361,72,375,73',
+'361,479,361,361,361,361,361,361,361,74,682,682,682,682,682,682,682,682',
+'76,682,223,223,77,682,358,682,682,682,682,682,682,682,862,862,862,862',
+'862,862,862,862,79,862,265,265,80,862,363,862,862,862,862,862,862,862',
+'362,362,362,362,362,362,362,362,84,362,225,225,94,362,360,362,362,362',
+'362,362,362,362,489,489,95,797,797,797,797,797,797,797,797,100,797,490',
+'490,101,797,361,797,797,797,797,797,797,797,104,811,811,811,811,811',
+'811,811,811,106,811,497,497,108,811,682,811,811,811,811,811,811,811',
+'838,838,838,838,838,838,838,838,110,838,549,297,114,838,862,838,838',
+'838,838,838,838,838,491,491,797,684,684,117,549,181,181,297,297,297',
+'297,297,362,487,549,118,221,119,487,487,797,221,221,796,796,796,796',
+'796,796,796,796,122,796,492,492,123,796,797,796,796,796,796,796,796',
+'796,124,835,835,835,835,835,835,835,835,126,835,128,835,129,835,811',
+'835,835,835,835,835,835,835,514,514,514,514,514,514,514,514,318,514',
+'82,82,131,514,838,514,514,514,514,514,514,514,488,133,796,389,389,488',
+'488,318,318,318,318,823,823,823,823,823,823,823,823,564,823,136,796',
+'137,823,138,823,823,823,823,823,823,823,495,495,495,495,742,742,796',
+'564,564,564,564,224,224,224,224,207,207,207,207,207,207,207,207,547',
+'207,510,510,510,207,835,207,207,207,207,207,207,207,510,510,510,510',
+'510,510,547,547,547,547,547,546,546,546,514,546,546,546,546,207,207',
 '207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207',
-'207,207,207,207,122,119,799,118,117,207,207,207,207,207,207,207,207',
-'114,810,290,110,108,814,815,816,817,821,211,211,211,211,211,211,211',
-'211,822,211,106,104,101,211,207,211,211,211,211,211,211,211,212,212',
-'212,212,212,212,212,212,828,212,833,100,95,212,836,212,212,212,212,212',
-'212,212,902,902,902,902,902,902,902,902,837,902,94,84,840,902,80,902',
-'902,902,902,902,902,902,591,591,591,591,591,591,591,591,79,591,845,846',
-'77,591,850,591,591,591,591,591,591,591,76,852,853,855,575,575,575,575',
-'575,575,575,575,74,575,73,860,861,575,211,575,575,575,575,575,575,575',
-'234,234,234,234,234,234,234,234,72,234,863,70,869,234,212,234,234,234',
-'234,234,234,234,584,584,584,584,584,584,584,584,872,584,873,584,874',
-'584,902,584,584,584,584,584,584,584,514,514,514,514,514,514,514,514',
-'876,514,877,878,69,514,591,514,514,514,514,514,514,514,68,881,882,234',
-'162,162,162,162,162,162,162,162,162,162,162,4,883,38,575,16,431,4,432',
-'234,428,4,365,365,365,365,365,365,365,365,437,365,442,443,426,365,234',
-'365,365,365,365,365,365,365,364,364,364,364,364,364,364,364,425,364',
-'446,419,416,364,584,364,364,364,364,364,364,364,363,363,363,363,363',
-'363,363,363,,363,,,,363,514,363,363,363,363,363,363,363,838,838,838',
-'838,838,838,838,838,,838,,,,838,,838,838,838,838,838,838,838,,,,,835',
-'835,835,835,835,835,835,835,,835,,835,,835,365,835,835,835,835,835,835',
-'835,362,362,362,362,362,362,362,362,,362,,,,362,364,362,362,362,362',
-'362,362,362,361,361,361,361,361,361,361,361,,361,,,,361,363,361,361',
-'361,361,361,361,361,823,823,823,823,823,823,823,823,,823,,,,823,838',
-'823,823,823,823,823,823,823,,,,,360,360,360,360,360,360,360,360,,360',
-',,,360,835,360,360,360,360,360,360,360,811,811,811,811,811,811,811,811',
-',811,,,,811,362,811,811,811,811,811,811,811,669,669,669,669,,424,,,',
-'669,669,424,,,361,424,,,669,669,,,,,,,,,,,,,,,,,823,54,54,54,54,54,54',
-'54,54,54,54,54,,,,478,478,,478,,,,,,,478,360,,,,,,,669,,,,,,54,54,54',
-'54,54,54,54,,,811,478,478,478,478,478,478,478,478,478,478,478,478,478',
-'478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,150,,150',
-',,478,478,478,478,478,478,478,478,,,,,,,,,,,,,,,,,,,,,150,150,150,150',
+'207,207,207,207,207,207,207,207,207,823,496,496,496,496,207,207,207',
+'207,207,207,207,207,748,748,748,748,748,748,748,748,139,748,493,493',
+'141,748,144,748,748,748,748,748,748,748,151,152,207,859,859,859,859',
+'859,859,859,859,159,859,160,164,165,859,167,859,859,859,859,859,859',
+'859,575,575,575,575,575,575,575,575,168,575,169,173,174,575,175,575',
+'575,575,575,575,575,575,748,177,178,179,183,184,257,257,257,257,257',
+'257,257,257,189,257,195,198,206,257,748,257,257,257,257,257,257,257',
+'226,581,581,581,581,581,581,581,581,748,581,227,581,228,581,229,581',
+'581,581,581,581,581,581,729,729,729,729,729,729,729,729,235,729,236',
+'859,240,729,242,729,729,729,729,729,729,729,256,584,584,584,584,584',
+'584,584,584,266,584,575,584,271,584,272,584,584,584,584,584,584,584',
+'274,276,147,147,147,147,147,147,147,147,280,147,281,282,283,147,257',
+'147,147,147,147,147,147,147,284,591,591,591,591,591,591,591,591,285',
+'591,306,307,309,591,581,591,591,591,591,591,591,591,719,719,719,719',
+'719,719,719,719,324,719,326,719,327,719,729,719,719,719,719,719,719',
+'719,334,288,147,602,246,246,246,288,335,602,337,288,338,602,342,584',
+'246,246,246,246,246,246,147,343,368,714,714,714,714,714,714,714,714',
+'380,714,381,382,383,714,147,714,714,714,714,714,714,714,384,710,710',
+'710,710,710,710,710,710,394,710,395,396,401,710,591,710,710,710,710',
+'710,710,710,706,706,706,706,706,706,706,706,402,706,407,408,409,706',
+'719,706,706,706,706,706,706,706,504,504,504,504,504,504,504,504,410',
+'504,411,412,413,504,414,504,504,504,504,504,504,504,416,419,425,365',
+'365,365,365,365,365,365,365,426,365,428,431,432,365,714,365,365,365',
+'365,365,365,365,827,827,827,827,437,442,443,446,450,827,827,783,783',
+'783,783,710,454,460,827,827,783,783,504,504,461,4,696,462,373,783,783',
+'4,696,146,373,4,696,706,373,146,463,465,504,146,472,630,630,630,630',
+'630,630,630,630,480,630,483,630,498,630,504,630,630,630,630,630,630',
+'630,499,500,827,364,364,364,364,364,364,364,364,501,364,783,502,525',
+'364,365,364,364,364,364,364,364,364,908,908,908,908,908,908,908,908',
+'526,908,529,530,531,908,533,908,908,908,908,908,908,908,341,341,341',
+'341,341,341,341,341,534,341,535,536,537,341,538,341,341,341,341,341',
+'341,341,543,739,739,739,739,544,548,88,424,557,739,739,739,88,424,630',
+'559,88,424,739,739,565,570,572,578,583,347,347,347,347,347,347,347,347',
+'586,347,588,598,600,347,364,347,347,347,347,347,347,347,345,345,345',
+'345,345,345,345,345,604,345,605,606,607,345,908,345,345,345,345,345',
+'345,345,739,162,162,162,162,162,162,162,162,162,162,162,608,610,341',
+'611,616,619,632,345,345,345,345,345,345,345,345,345,345,345,345,345',
+'345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,634,636',
+'637,638,640,345,345,345,345,345,345,345,345,641,643,347,260,260,260',
+'260,260,260,260,348,348,348,348,348,348,348,348,644,348,646,648,651',
+'348,345,348,348,348,348,348,348,348,349,349,349,349,349,349,349,349',
+'658,349,662,663,664,349,665,349,349,349,349,349,349,349,350,350,350',
+'350,350,350,350,350,666,350,668,671,673,350,688,350,350,350,350,350',
+'350,350,351,351,351,351,351,351,351,351,689,351,693,694,695,351,697',
+'351,351,351,351,351,351,351,699,700,701,707,352,352,352,352,352,352',
+'352,352,711,352,718,725,727,352,348,352,352,352,352,352,352,352,353',
+'353,353,353,353,353,353,353,730,353,731,746,749,353,349,353,353,353',
+'353,353,353,353,354,354,354,354,354,354,354,354,750,354,755,760,761',
+'354,350,354,354,354,354,354,354,354,355,355,355,355,355,355,355,355',
+'763,355,764,766,767,355,351,355,355,355,355,355,355,355,768,769,770',
+'771,356,356,356,356,356,356,356,356,772,356,773,775,776,356,352,356',
+'356,356,356,356,356,356,357,357,357,357,357,357,357,357,780,357,781',
+'793,799,357,353,357,357,357,357,357,357,357,359,359,359,359,359,359',
+'359,359,810,359,814,815,816,359,354,359,359,359,359,359,359,359,149',
+'149,149,149,149,149,149,149,817,149,821,149,822,149,355,149,149,149',
+'149,149,149,149,828,833,836,837,474,474,474,474,474,474,474,474,840',
+'474,845,846,850,474,356,474,474,474,474,474,474,474,290,290,290,290',
+'290,290,290,290,,290,,,,290,357,290,290,290,290,290,290,290,848,848',
+'848,848,848,848,848,848,,848,,,,848,359,848,848,848,848,848,848,848',
+'806,806,806,806,806,806,806,806,,806,,,,806,149,806,806,806,806,806',
+'806,806,245,,,,,,245,,,253,245,669,669,669,669,253,,,474,253,669,669',
+',,,848,,,,669,669,170,170,170,170,170,170,170,,,290,,,,,848,,,403,403',
+'403,403,403,403,403,403,,403,,,,403,848,403,403,403,403,403,403,403',
+'513,513,513,513,513,513,513,513,,513,669,,,513,806,513,513,513,513,513',
+'513,513,212,212,212,212,212,212,212,212,,212,,,,212,,212,212,212,212',
+'212,212,212,211,211,211,211,211,211,211,211,,211,,,,211,,211,211,211',
+'211,211,211,211,,,,464,464,464,464,464,464,464,464,464,464,464,,,,,403',
+',,,,,,54,54,54,54,54,54,54,54,54,54,54,,,,,513,464,464,464,464,464,464',
+'464,,,,478,478,,478,,,,,,,478,212,54,54,54,54,54,54,54,36,36,36,36,36',
+'36,36,36,36,36,36,36,36,36,211,478,478,478,478,478,478,478,478,478,478',
+'478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478',
+'478,582,,582,,,478,478,478,478,478,478,478,478,,,,,,,,,,,,,,,,,,,,,582',
+'582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582',
+'582,582,582,582,582,582,582,582,582,582,150,,150,,,582,582,582,582,582',
+'582,582,582,,,,,,,,,,,,,,,,,,,,,150,150,150,150,150,150,150,150,150',
 '150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150',
-'150,150,150,150,150,150,150,582,,582,,,150,150,150,150,150,150,150,150',
-',,,,,,,,,,,,,,,,,,,,582,582,582,582,582,582,582,582,582,582,582,582',
-'582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,372',
-',,,,582,582,582,582,582,582,582,582,,,,,,,,,,,,,,,,,,,372,372,372,372',
+'150,150,372,,,,,150,150,150,150,150,150,150,150,,,,,,,,,,,,,,,,,,,372',
 '372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372',
-'372,372,372,372,372,372,372,459,,,,,372,372,372,372,372,372,372,372',
-'372,,,,,,,,,,,,,,,,,,459,459,459,459,459,459,459,459,459,459,459,459',
-'459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,250',
-',,,,459,459,459,459,459,459,459,459,,,,,,,,,,,,,,,,,,,250,250,250,250',
+'372,372,372,372,372,372,372,372,372,372,293,,,,,372,372,372,372,372',
+'372,372,372,372,,,,,,,,,,,,,,,,,,293,293,293,293,293,293,293,293,293',
+'293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293',
+'293,293,444,293,,,,293,293,293,293,293,293,293,293,,,,,,,,,,,,,,,,,',
+',444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444',
+'444,444,444,444,444,444,444,444,444,444,444,445,,,,,444,444,444,444',
+'444,444,444,444,,,,,,,,,,,,,,,,,,,445,445,445,445,445,445,445,445,445',
+'445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445',
+'445,445,550,,,,,445,445,445,445,445,445,445,445,,,,,,,,,,,,,,,,,,,550',
+'550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550',
+'550,550,550,550,550,550,550,550,550,550,554,550,,,,550,550,550,550,550',
+'550,550,550,,,,,,,,,,,,,,,,,,,554,554,554,554,554,554,554,554,554,554',
+'554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554',
+'554,566,554,,,,554,554,554,554,554,554,554,554,,,,,,,,,,,,,,,,,,,566',
+'566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566',
+'566,566,566,566,566,566,566,566,566,566,71,566,,,,566,566,566,566,566',
+'566,566,566,,,,,,,,,,,,,,,,,,,71,71,71,71,71,71,71,71,71,71,71,71,71',
+'71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,386,,,,,71,71,71,71,71',
+'71,71,71,,,,,,,,,,,,,,,,,,,386,386,386,386,386,386,386,386,386,386,386',
+'386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386',
+'459,386,,,,386,386,386,386,386,386,386,386,,,,,,,,,,,,,,,,,,,459,459',
+'459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459',
+'459,459,459,459,459,459,459,459,459,251,,,,,459,459,459,459,459,459',
+'459,459,,,,,,,,,,,,,,,,,,,251,251,251,251,251,251,251,251,251,251,251',
+'251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251',
+'250,251,,,,251,251,251,251,251,251,251,251,,,,,,,,,,,,,,,,,,,250,250',
 '250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250',
-'250,250,250,250,250,250,250,293,,,,,250,250,250,250,250,250,250,250',
-',,,,,,,,,,,,,,,,,,293,293,293,293,293,293,293,293,293,293,293,293,293',
-'293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,445,293',
-',,,293,293,293,293,293,293,293,293,,,,,,,,,,,,,,,,,,,445,445,445,445',
-'445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445',
-'445,445,445,445,445,445,445,251,,,,,445,445,445,445,445,445,445,445',
-',,,,,,,,,,,,,,,,,,251,251,251,251,251,251,251,251,251,251,251,251,251',
-'251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,444,251',
-',,,251,251,251,251,251,251,251,251,,,,,,,,,,,,,,,,,,,444,444,444,444',
-'444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444',
-'444,444,444,444,444,444,444,156,,,,,444,444,444,444,444,444,444,444',
-',,,,,,,,,,,,,,,,,,156,156,156,156,156,156,156,156,156,156,156,156,156',
-'156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,386,,,,',
-'156,156,156,156,156,156,156,156,,,,,,,,,,,,,,,,,,,386,386,386,386,386',
-'386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386',
-'386,386,386,386,386,386,71,386,,,,386,386,386,386,386,386,386,386,,',
-',,,,,,,,,,,,,,,,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71',
-'71,71,71,71,71,71,71,71,71,71,550,,,,,71,71,71,71,71,71,71,71,,,,,,',
-',,,,,,,,,,,,550,550,550,550,550,550,550,550,550,550,550,550,550,550',
-'550,550,550,550,550,550,550,550,550,550,550,550,550,550,554,550,,,,550',
-'550,550,550,550,550,550,550,,,,,,,,,,,,,,,,,,,554,554,554,554,554,554',
-'554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554',
-'554,554,554,554,554,566,554,,,,554,554,554,554,554,554,554,554,,,,,',
-',,,,,,,,,,,,,566,566,566,566,566,566,566,566,566,566,566,566,566,566',
-'566,566,566,566,566,566,566,566,566,566,566,566,566,566,,566,,,,566',
-'566,566,566,566,566,566,566,464,464,464,464,464,464,464,464,464,464',
-'464,,,,,,,,,,,,,,,,,,,,,,,,,,,,464,464,464,464,464,464,464,244,244,244',
+'250,250,250,250,250,250,250,250,250,156,,,,,250,250,250,250,250,250',
+'250,250,,,,,,,,,,,,,,,,,,,156,156,156,156,156,156,156,156,156,156,156',
+'156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156',
+',,,,,156,156,156,156,156,156,156,156,622,622,622,622,622,622,622,622',
+'622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622',
+'622,622,622,,,,,,622,622,622,622,622,622,622,622,40,40,40,40,40,40,40',
+'40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,,,,,',
+'40,40,40,40,40,40,40,40,705,705,705,705,705,705,705,705,705,705,705',
+'705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705',
+',,,,,705,705,705,705,705,705,705,705,244,244,244,244,244,244,244,244',
 '244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244',
-'244,244,244,244,244,244,244,244,,,,,,244,244,244,244,244,244,244,244',
-'40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40',
-'40,40,40,40,40,,,,,,40,40,40,40,40,40,40,40,289,289,289,289,289,289',
-'289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289',
-'289,289,289,289,289,,,,,,289,289,289,289,289,289,289,289,709,709,709',
+'244,244,244,,,,,,244,244,244,244,244,244,244,244,519,519,519,519,519',
+'519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519',
+'519,519,519,519,519,519,,,,,,519,519,519,519,519,519,519,519,709,709',
 '709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709',
-'709,709,709,709,709,709,709,709,,,,,,709,709,709,709,709,709,709,709',
-'519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519',
-'519,519,519,519,519,519,519,519,519,519,519,,,,,,519,519,519,519,519',
-'519,519,519,622,622,622,622,622,622,622,622,622,622,622,622,622,622',
-'622,622,622,622,622,622,622,622,622,622,622,622,622,622,,,,,,622,622',
-'622,622,622,622,622,622,705,705,705,705,705,705,705,705,705,705,705',
-'705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705',
-',,,,,705,705,705,705,705,705,705,705,239,239,239,239,239,239,239,239',
-'239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239',
-'239,239,239,,,,,,239,239,239,239,239,239' ]
-        racc_action_check = arr = ::Array.new(3623, nil)
+'709,709,709,709,709,709,709,709,709,,,,,,709,709,709,709,709,709,709',
+'709,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289',
+'289,289,289,289,289,289,289,289,289,289,289,289,,,,,,289,289,289,289',
+'289,289,289,289,239,239,239,239,239,239,239,239,239,239,239,239,239',
+'239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,,,,,,239',
+'239,239,239,239,239' ]
+        racc_action_check = arr = ::Array.new(3593, nil)
         idx = 0
         clist.each do |str|
@@ -967,95 +968,95 @@
 
 racc_action_pointer = [
-   nil,  1442,    -1,  1586,  1989,   nil,   nil,   nil,   602,   527,
-   nil,   nil,   nil,   nil,   nil,   nil,  1993,   nil,   nil,   nil,
+   nil,   613,    -1,   620,  1492,   nil,   nil,   nil,   612,   627,
+   nil,   nil,   nil,   nil,   nil,   nil,   680,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,  1340,   nil,  1985,   nil,
-  3295,   123,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,  2182,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,  1974,  1964,
-  1919,  2991,  1910,  1890,  1888,   198,  1876,  1866,   nil,  1806,
-  1852,   nil,   679,   nil,  1816,   122,   655,   nil,   607,   174,
-   nil,   nil,   190,   nil,  1786,  1766,   nil,   nil,   nil,   nil,
-  1821,  1744,   550,   nil,  1805,   nil,  1804,   nil,  1788,   nil,
-  1787,   nil,   nil,   nil,  1784,   587,   nil,  1775,  1774,  1772,
-   nil,   nil,  1771,  1714,  1711,    77,  1706,   350,  1627,  1628,
-   nil,  1558,   nil,  1538,   nil,   nil,  1592,  1477,  1549,  1481,
-   nil,  1480,   nil,   nil,  1539,   nil,  1663,  1133,   285,  1177,
-  2340,  1531,  1520,   nil,    27,   nil,  2873,    45,   nil,  1495,
-  1520,   271,  1895,   nil,  1502,  1505,  1481,  1500,  1478,  1312,
-  1607,   538,   476,  1423,  1344,  1343,   525,  1328,  1300,  1260,
-   nil,   692,   nil,  1287,  1290,   184,   nil,   156,   nil,  1276,
-   450,   nil,    -6,   nil,   -65,  1277,   nil,   nil,  1159,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,  1232,  1709,   nil,   nil,
-   437,  1801,  1823,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   590,   741,   751,   893,   767,  1204,  1186,  1174,  1157,
-   774,   nil,   nil,   nil,  1915,  1178,  1155,   nil,   nil,  3541,
-  1157,   nil,  1124,   nil,  3254,  1665,  1017,   nil,   nil,   nil,
-  2578,  2755,   nil,   592,   612,   nil,  1131,   414,   149,   nil,
-  1324,   nil,   248,   nil,   332,   814,  1135,   271,   nil,   599,
-   nil,  1102,  1119,   nil,  1081,   nil,  1079,   nil,   430,   nil,
-  1069,  1098,  1060,  1088,  1055,  1035,   176,   nil,  1322,  3336,
-  1687,    97,   nil,  2637,   291,   nil,   nil,   802,   nil,   nil,
-   nil,   nil,   nil,    80,   nil,   nil,  1002,   984,   177,   980,
-   nil,   nil,   nil,   nil,   nil,   183,   nil,   nil,   797,   nil,
-   nil,   nil,   nil,   nil,   961,   199,   900,   857,   nil,    -2,
-   nil,   nil,   nil,   254,   858,   787,   nil,   840,   838,   nil,
-   206,  1503,   829,   811,   nil,  1367,   nil,  1300,  1253,  1208,
-  1155,  1110,   993,   971,   949,   926,   857,   787,   720,   695,
-  2191,  2143,  2121,  2051,  2029,  2007,   447,   nil,   811,   nil,
-   nil,   nil,  2460,  1321,   nil,   342,   nil,   nil,   nil,   nil,
-   804,   792,   788,   770,   754,   nil,  2932,   nil,   nil,   806,
-   nil,   nil,   330,   nil,   654,   643,   524,   nil,   nil,   nil,
-   nil,   516,   470,   461,   nil,   nil,   nil,   458,   381,   423,
-   383,   308,   359,   271,    69,   nil,  2032,   nil,   nil,  2032,
-   nil,   nil,   -37,   nil,  2233,  2029,  1981,   nil,  1967,   nil,
-  1078,  1893,  1965,   nil,     0,   nil,   nil,  2008,   nil,   nil,
-   nil,   nil,  1911,  2005,  2814,  2696,  1999,    73,   nil,   nil,
-   -32,   nil,   599,   nil,    31,   nil,   nil,   nil,   nil,  2519,
-   -16,   155,   192,   255,  3160,   328,   nil,   nil,   nil,    -8,
-    81,   nil,   370,   nil,   439,   nil,   596,   537,  2279,   495,
-   474,   nil,   nil,   484,   nil,   nil,   nil,   741,   526,   849,
-   861,   871,   900,   912,   935,   856,   717,   951,   671,   671,
-   676,   685,   710,   nil,   553,   995,   nil,   nil,   nil,   nil,
-  1660,   253,   197,   651,  1959,  1459,   nil,   nil,  1664,  3418,
-   634,  1551,  1573,  1595,   nil,   874,   891,   nil,   892,   877,
-   925,   930,   nil,   940,   953,   940,   975,   947,   992,   977,
-   nil,   nil,   nil,   969,  1006,   nil,  1084,   638,  1027,   587,
-  3050,   nil,   nil,   310,  3109,   nil,   nil,  1003,    78,  1081,
-    13,   284,   nil,    92,   642,  1096,  3168,   nil,   305,   nil,
-  1109,   nil,   996,    77,   nil,  1893,   -11,   130,  1108,   nil,
-   484,  1617,  2401,  1159,  1937,   nil,  1179,   nil,  1178,   nil,
-   nil,  1867,   nil,   nil,   nil,   nil,    14,    26,  1211,   356,
-  1222,   nil,  1079,   nil,  1234,  1235,  1237,  1250,  1252,   448,
-   nil,  1198,   nil,     0,   nil,   nil,  1277,   nil,   nil,  1279,
-   nil,   nil,  3459,   nil,   nil,   346,   524,   nil,   nil,   nil,
-    12,    79,  1272,   nil,  1300,   nil,  1305,  1286,  1289,   nil,
-  1319,  1326,    25,  1304,  1305,   nil,  1337,   nil,  1315,   nil,
-   nil,  1231,   nil,   465,   nil,   nil,   nil,   577,  1337,   nil,
-   nil,   nil,  1364,  1365,  1256,  1350,  1377,   nil,  1398,  2235,
-   nil,  1426,   nil,  1430,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,  1525,   nil,   387,   nil,   nil,   nil,  1409,  1437,
-   nil,  1454,  1456,  1432,  1463,  1451,   887,  1479,   nil,  1480,
-  1457,  1500,   nil,    24,   nil,  3500,  1345,  1448,   nil,  3377,
-  1275,  1523,   nil,   nil,  1231,   nil,   496,   nil,  1540,  1063,
-   384,    76,   nil,   nil,   nil,  1521,   nil,  1549,   nil,  1041,
-  1437,  1544,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   888,
-   nil,   nil,  1026,  1049,   nil,   nil,  1595,   nil,  1018,  1594,
-   nil,   548,   nil,   nil,   nil,  1587,   262,   nil,   nil,   nil,
-  1591,  1626,   nil,  1632,  1632,   nil,  1634,  1613,  1614,  1641,
-  1531,  1656,  1633,  1674,   nil,  1648,  1683,    75,   352,   nil,
-  1686,  1678,   115,  1665,   344,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,  1729,   nil,   nil,   834,   812,   nil,  1742,
-   nil,   547,   nil,   nil,   nil,   nil,   765,   nil,   330,   nil,
-  1753,  2213,   229,   nil,  1783,  1784,  1672,  1761,   nil,   nil,
-   nil,  1674,  1771,  2165,     8,   nil,   nil,  1322,  1791,   nil,
-   nil,   nil,   nil,  1824,   544,  2099,  1828,  1815,  2073,    89,
-  1819,   598,   nil,   -13,   nil,  1838,  1865,   nil,   673,   nil,
-  1843,   205,  1879,  1883,   nil,  1854,    -9,   nil,   nil,   628,
-  1892,  1867,   575,  1917,   nil,   nil,   464,   nil,   nil,  1887,
-   nil,   nil,  1932,  1936,  1936,   nil,  1959,  1900,  1932,   591,
-   399,  1944,  1945,  1928,   nil,   nil,   nil,   nil,   nil,   521,
-   nil,   nil,   nil,    11,   539,   100,   nil,   595,   581,   nil,
-   nil,   614,  1845,   nil,   650,   765,   966,   nil,  1643,  1577,
+   nil,   nil,   nil,   nil,   nil,   nil,  2268,   nil,   694,   nil,
+  3265,   123,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,  2185,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   702,   712,
+   721,  2888,   717,   719,   729,   115,   738,   742,   nil,   704,
+   770,   nil,   921,   nil,   755,    75,   359,   nil,  1610,   174,
+   nil,   nil,    89,   nil,   730,   742,   nil,   nil,   nil,   nil,
+   807,   755,   496,   nil,   827,   nil,   836,   nil,   840,   nil,
+   858,   nil,   nil,   nil,   862,   586,   nil,   877,   889,   891,
+   nil,   nil,   905,   909,   917,    27,   922,   606,   866,   870,
+   nil,   892,   nil,   903,   nil,   nil,   979,   888,   983,  1040,
+   nil,  1044,   nil,   nil,  1106,   nil,  1500,  1268,   484,  2000,
+  2416,  1115,  1107,   nil,    26,   nil,  3183,   448,   nil,  1094,
+  1123,    97,  1591,   nil,  1124,  1129,   575,  1127,  1143,  1031,
+  2017,   282,   350,  1146,  1147,  1149,   335,  1163,  1164,  1134,
+   nil,   848,   nil,  1163,  1168,   184,   nil,   156,   nil,  1171,
+   218,   nil,    -6,   nil,   -65,  1178,   nil,   nil,  1081,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,  1179,  1019,   nil,   nil,
+   437,  2228,  2206,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   880,   687,   729,   989,   767,  1182,  1177,  1178,  1179,
+   132,   nil,   nil,   nil,   553,  1222,  1220,   nil,   nil,  3511,
+  1225,   nil,  1196,   nil,  3347,  2107,  1268,   nil,   nil,   nil,
+  3124,  3065,   nil,  2116,   612,   nil,  1230,  1176,   130,   nil,
+  1615,   nil,   480,   nil,   367,   767,  1244,    76,   nil,    -1,
+   nil,  1217,  1245,   nil,  1227,   nil,  1228,   nil,   524,   nil,
+  1237,  1270,  1241,  1271,  1252,  1261,   197,   nil,  1329,  3470,
+  2048,   271,   nil,  2534,   291,   nil,   nil,   778,   nil,   nil,
+   nil,   nil,   nil,   177,   nil,   nil,  1232,  1233,   198,  1234,
+   nil,   nil,   nil,   nil,   nil,   183,   nil,   nil,   867,   nil,
+   nil,   nil,   nil,   nil,  1252,    10,  1197,  1313,   nil,    -2,
+   nil,   nil,   nil,   190,  1328,  1274,   nil,  1337,  1339,   nil,
+   206,  1588,  1336,  1345,   nil,  1658,   nil,  1636,  1750,  1772,
+  1794,  1816,  1842,  1864,  1886,  1908,  1934,  1956,   651,  1978,
+   695,   720,   787,   673,  1544,  1452,   325,   nil,  1350,   nil,
+   nil,   nil,  2475,  1495,   nil,   692,   nil,   nil,   nil,   nil,
+  1361,  1363,  1364,  1365,  1375,   nil,  2947,   nil,   nil,   936,
+   nil,   nil,   342,   nil,  1384,  1386,  1387,   nil,   nil,   nil,
+   nil,  1382,  1400,  2162,   nil,   nil,   nil,  1402,  1347,  1404,
+  1426,  1368,  1429,  1430,  1428,   nil,  1440,   nil,   nil,  1442,
+   nil,   nil,   -37,   nil,  1611,  1443,  1422,   nil,  1424,   nil,
+   476,  1355,  1426,   nil,   599,   nil,   nil,  1471,   nil,   nil,
+   nil,   nil,  1373,  1467,  2593,  2652,  1441,   -11,   nil,   nil,
+  1444,   nil,   601,   nil,  1483,   nil,   nil,   nil,   nil,  3006,
+  1385,  1485,  1488,  1501,  2163,  1477,   nil,   nil,   nil,    -8,
+   254,   nil,  1509,   nil,  2026,   nil,   593,   597,  2294,   628,
+  1516,   nil,   nil,  1521,   nil,   nil,   nil,   877,   954,   791,
+   804,   855,   890,  1087,   596,   978,  1063,   815,  1515,  1509,
+  1509,  1518,  1518,   nil,  1427,   709,   nil,   nil,   nil,   nil,
+   958,    81,   261,  2184,   949,    12,   nil,   nil,   592,  3388,
+   590,   461,   495,   521,   nil,  1544,  1563,   nil,    80,  1536,
+  1568,  1570,   nil,  1572,  1588,  1559,  1591,  1562,  1593,   318,
+   nil,   nil,   nil,  1572,  1604,   nil,   937,   937,  1603,   857,
+  2711,   nil,   nil,   310,  2770,   nil,   nil,  1547,    79,  1613,
+    13,   355,   nil,    92,   900,  1618,  2829,   nil,   437,   nil,
+  1620,   nil,  1507,   344,   nil,  1148,    73,   433,  1597,   nil,
+   541,  1199,  2355,  1627,  1244,   nil,  1636,   nil,  1635,   nil,
+   nil,  1291,   nil,   nil,   nil,   nil,    14,    27,  1639,   430,
+  1640,   nil,  1331,   nil,  1658,  1660,  1661,  1657,  1680,   240,
+  1587,  1626,   nil,     0,   nil,   nil,  1687,   nil,   nil,  1689,
+   nil,   nil,  3224,   nil,   nil,   332,   578,   nil,   nil,   nil,
+  1519,    78,  1660,   nil,  1716,   nil,  1721,  1689,  1692,   nil,
+  1720,  1733,    75,  1703,  1720,   nil,  1753,   nil,  1723,   nil,
+   nil,  1638,   nil,   521,   nil,   nil,   nil,   577,  1742,   nil,
+   nil,   nil,  1769,  1770,  1661,  1747,  1789,   nil,  1795,  2125,
+   nil,  1794,   nil,  1798,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   743,   nil,   844,   nil,   nil,   nil,  1768,  1811,
+   nil,   176,   256,  1788,  1819,  1790,  1493,  1817,   nil,  1825,
+  1801,  1829,   nil,    74,   nil,  3306,  1405,  1772,   nil,  3429,
+  1383,  1837,   nil,   nil,  1360,   nil,   587,   nil,  1845,  1313,
+   384,    76,   nil,   nil,   nil,  1815,   nil,  1842,   nil,  1221,
+  1746,  1837,   nil,   nil,   nil,   nil,   nil,   nil,   nil,  1611,
+   nil,   nil,  1006,   482,   nil,   nil,  1867,   nil,  1101,  1864,
+  1788,   447,   nil,   nil,   nil,  1858,   596,   nil,   nil,   nil,
+  1859,  1885,   nil,  1908,  1909,   nil,  1911,  1882,  1891,  1918,
+  1808,  1920,  1902,  1933,   nil,  1907,  1934,    -9,   284,   nil,
+  1951,  1927,   199,  1485,   576,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,  1954,   nil,   nil,   904,   812,   nil,  1930,
+   nil,   513,   nil,   nil,   nil,   nil,  2092,   nil,   330,   nil,
+  1947,   835,   240,   nil,  1975,  1976,  1864,  1970,   nil,   nil,
+   nil,  1884,  1974,   982,     8,   nil,   nil,  1474,  1982,   nil,
+   nil,   nil,   nil,  2014,   525,   927,  2015,  1987,   857,   253,
+  1996,   399,   nil,   -13,   nil,  1997,  2024,   nil,  2070,   nil,
+  2000,   205,    -5,    30,   nil,    52,    25,   nil,   nil,  1126,
+   117,    97,   765,   197,   nil,   nil,   180,   nil,   nil,   217,
+   nil,   nil,   279,   291,   379,   nil,   418,   367,   433,   534,
+   412,   454,   467,   460,   nil,   nil,   nil,   nil,   nil,   439,
+   nil,   nil,   nil,    11,   533,   100,   nil,   539,   512,   nil,
+   nil,   558,   414,   nil,   576,   594,   567,   nil,  1566,   606,
    nil ]
 
@@ -1200,5 +1201,5 @@
    665,   nil,   nil,   nil,   nil,   nil,   671,   596,   597,   588,
    nil,   nil,   553,   557,   673,   nil,   238,   nil,   763,   622,
-   853,   nil,   766,   nil,   nil,   nil,   530,   553,   nil,   nil,
+   853,   nil,   766,   nil,   610,   nil,   530,   553,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   664,   nil,
@@ -1216,5 +1217,5 @@
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   696,
    nil,   873,   nil,   792,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   464,   nil,   nil,   339,   nil,   nil,   nil,   nil,   nil,
+   nil,   464,   nil,   nil,   339,   nil,   nil,   750,   610,   nil,
    nil,   769,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   894,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
@@ -1280,5 +1281,5 @@
     23,   nil,   nil,   nil,   nil,   nil,    23,     4,     4,    23,
    nil,   nil,    45,    45,    55,   nil,    28,   nil,     6,    47,
-    84,   nil,     6,   nil,   nil,   nil,     5,    45,   nil,   nil,
+    84,   nil,     6,   nil,     4,   nil,     5,    45,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    47,   nil,
@@ -1296,5 +1297,5 @@
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    25,
    nil,     6,   nil,    32,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,    45,   nil,   nil,    22,   nil,   nil,   nil,   nil,   nil,
+   nil,    45,   nil,   nil,    22,   nil,   nil,     4,     4,   nil,
    nil,    47,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,     6,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
@@ -2943,5 +2944,5 @@
   def _reduce_104(val, _values, result)
     			# tag が無い場合、内部名を与える
-			result = StructType.new( :"$TAG_#{@@no_struct_tag_num}" )
+			result = StructType.new( :"TAG__#{@@no_struct_tag_num}__" )
 			@@no_struct_tag_num += 1
 			StructType.set_define( true )
@@ -3749,5 +3750,5 @@
 module_eval(<<'.,.,', 'bnf.y.rb', 802)
   def _reduce_233(val, _values, result)
-    	result = [val[0].val]		
+    	result = [val[0]]		
     result
   end
@@ -3756,5 +3757,5 @@
 module_eval(<<'.,.,', 'bnf.y.rb', 804)
   def _reduce_234(val, _values, result)
-    	result << val[2].val		
+    	result << val[2]		
     result
   end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.y.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.y.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.y.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2016 by TOPPERS Project
+#   Copyright (C) 2008-2018 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -379,5 +379,5 @@
 		{
 			# tag が無い場合、内部名を与える
-			result = StructType.new( :"$TAG_#{@@no_struct_tag_num}" )
+			result = StructType.new( :"TAG__#{@@no_struct_tag_num}__" )
 			@@no_struct_tag_num += 1
 			StructType.set_define( true )
@@ -800,8 +800,8 @@
 
 region_name_list
-        : IDENTIFIER
-		{	result = [val[0].val]		}
-        | region_name_list ',' IDENTIFIER
-		{	result << val[2].val		}
+        : namespace_identifier
+		{	result = [val[0]]		}
+        | region_name_list ',' namespace_identifier
+		{	result << val[2]		}
 
 const_statement
@@ -1807,5 +1807,5 @@
                   string += line
                   # この位置では error メソッドは使えない (token 読出し前)
-                  puts "error: #{file} line #{lineno}: string literal has newline without escape"
+                  puts "#{file}:#{lineno}:#{col}: error: string literal has newline without escape"
                   @@n_error += 1
                 end
@@ -1848,8 +1848,9 @@
                   b_in_string = true
                   # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
-                  puts "error: #{file} line #{lineno}: string literal has newline without escape"
+                  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<[0-9A-Za-z_\. \/]+>/   # AB: angle bracke
+                when /\A<(?:[^>\\]|\\.)*>/   # これはうまく行くようだ
                   @q << [:AB_STRING_LITERAL, Token.new($&, file, lineno, col)]
                 # 行コメント
@@ -1981,5 +1982,5 @@
       end
       if locale then
-        Console.puts "error: #{locale[0]}: line #{locale[1]} #{msg}"
+        Console.puts "#{locale[0]}:#{locale[1]}:#{locale[2]}: error: #{msg}"
       else
         Console.puts "error: #{msg}"
@@ -2014,5 +2015,5 @@
       end
       if locale then
-        Console.puts "warning: #{locale[0]}: line #{locale[1]} #{msg}"
+        Console.puts "#{locale[0]}:#{locale[1]}:#{locale[2]}: warning: #{msg}"
       else
         Console.puts "warning: #{msg}"
@@ -2047,5 +2048,5 @@
       end
       if locale then
-        Console.puts "info: #{locale[0]}: line #{locale[1]} #{msg}"
+        Console.puts "#{locale[0]}:#{locale[1]}:#{locale[2]}: info: #{msg}"
       else
         Console.puts "info: #{msg}"
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/componentobj.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/componentobj.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/componentobj.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2017 by TOPPERS Project
+#   Copyright (C) 2008-2019 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -149,5 +149,5 @@
     end
 
-    set_descriptor_list
+    # set_descriptor_list ##
 
     if @generate then
@@ -364,4 +364,14 @@
   end
 
+  @@set_descriptor_list = {}
+  def self.set_descriptor_list
+    Namespace.get_root.travers_all_signature{ |sig|
+      if @@set_descriptor_list[ sig ] == nil then
+        @@set_descriptor_list[ sig ] = true
+        sig.set_descriptor_list
+      end
+    }
+  end
+
   #== Signature# 引数で参照されている Descriptor 型のリストを作成する
   def set_descriptor_list
@@ -538,7 +548,9 @@
 # @ct_factory_list::    Factory[] :    celltype factory
 # @cell_list:: Cell[] : 定義のみ (V1.0.0.2 以降)
+# @ordered_cell_list:: Cell[] : ID 順に順序付けされたセルリスト、最適化以降有効 (リンク単位ごとに生成されなおす)
 # @singleton:: bool
 # @idx_is_id:: bool
 # @idx_is_id_act:: bool: actual value
+# @b_need_ptab:: bool: true if having cells in multi-domain
 # @active:: bool
 # @b_reuse:: bool :  reuse 指定されて import された(template 不要)
@@ -654,8 +666,11 @@
     if $idx_is_id then
       @idx_is_id = true
+      @idx_is_id_act = true
+      @b_need_ptab = true
     else
       @idx_is_id = false
-    end
-    @idx_is_id_act = @idx_is_id
+      @idx_is_id_act = false
+      @b_need_ptab = false
+    end
 
     Namespace.new_celltype( self )
@@ -700,5 +715,5 @@
     end
 
-    check_dynamic_join
+    # check_dynamic_join ##
 
     @@current_object = nil
@@ -886,4 +901,5 @@
         @idx_is_id = true
         @idx_is_id_act = true
+        @b_need_ptab = true
       when :ACTIVE
         @active = true
@@ -899,4 +915,5 @@
     if @singleton then
       @idx_is_id_act = false
+      @b_need_ptab = false
     end
   end
@@ -999,6 +1016,17 @@
   end
 
+  @@dynamic_join_checked_list = {}
+  def self.check_dynamic_join
+    Namespace.get_root.travers_all_celltype{ |ct|
+      if @@dynamic_join_checked_list[ ct ] == nil then
+        @@dynamic_join_checked_list[ ct ] = true
+        ct.check_dynamic_join
+      end
+    }
+  end
+
   #=== Celltype#dynamic の適合性チェック
   def check_dynamic_join
+    return if ! $verbose
     @port.each{ |port|
       signature = port.get_signature
@@ -1038,5 +1066,5 @@
               end
             end
-            cdl_warning( 'W9999 "$1" cannot handle Descriptor "$2" infromation for port "$3"', @name, param.get_name, port.get_name )
+            cdl_warning( 'W9999 "$1" cannot handle Descriptor "$2" information for port "$3"', @name, param.get_name, port.get_name )
           }
         end
@@ -1143,12 +1171,14 @@
   #     呼び口（ただし、最適化で不要となるものは除く）
   def has_INIB?
-#    print "name=#{@name} @n_attribute_ro=#{@n_attribute_ro}  @n_var_size_is=#{@n_var_size_is} @n_call_port=#{@n_call_port} @n_call_port_omitted_in_CB=#{@n_call_port_omitted_in_CB} @n_entry_port_array_ns=#{@n_entry_port_array_ns}\n"
-    return $rom &&
-      (@n_attribute_ro > 0 ||
-       @n_var_size_is > 0 ||
-       ( @n_call_port - @n_call_port_omitted_in_CB - (@n_call_port_dynamic-@n_call_port_array_dynamic) ) > 0 ||
-       $ram_initializer && @n_call_port_dynamic ||
-       @n_entry_port_array_ns > 0)
-#    return $rom && (@n_attribute_ro > 0 || ( @n_call_port - @n_call_port_omitted_in_CB ) > 0)
+
+    result = $rom &&
+             (@n_attribute_ro > 0 ||
+              @n_var_size_is > 0 ||
+              ( @n_call_port - @n_call_port_omitted_in_CB - (@n_call_port_dynamic-@n_call_port_array_dynamic) ) > 0 ||
+              $ram_initializer && @n_call_port_dynamic > 0 ||
+              @n_entry_port_array_ns > 0)
+    # print "name=#{@name} n_attribute_ro=#{@n_attribute_ro}  n_var_size_is=#{@n_var_size_is} n_call_port=#{@n_call_port} n_call_port_omitted_in_CB=#{@n_call_port_omitted_in_CB} n_call_port_dynamic=#{@n_call_port_dynamic} n_call_port_array_dynamic=#{@n_call_port_array_dynamic} n_entry_port_array_ns=#{@n_entry_port_array_ns} has_INIB?=#{result}\n"
+
+    return result
   end
 
@@ -1231,4 +1261,8 @@
   def idx_is_id_act?
     @idx_is_id_act
+  end
+
+  def multi_domain?
+    @b_need_ptab
   end
 
@@ -1353,4 +1387,5 @@
 #                                               逆require ポートに対して複数の結合がないかチェックする
 # @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin は生成後に追加される
+# @b_post_code_generated:: Bool: true if generated in tmp_plugin_post_code.cdl
 #
 # composite のためインスタンス変数
@@ -1375,5 +1410,7 @@
 # @id:: Integer : コード生成直前に設定  (プロトタイプ宣言の場合は -1 のまま放置)
 # @id_specified::Integer : 指定された id
-# @restrict_list::{ entry_name => { func_name, [ region_name, ... ] } }
+# @restrict_list::{ entry_name => { func_name, [ region_path_str, ... ] } }
+# @restrict_list2::{ entry_name => { func_name, [ domain_root_region, ... ] } }
+# @b_restrict_referenced::Bool: restrict_list が参照れた
 
 =begin
@@ -1459,4 +1496,7 @@
     @referenced_port_list = {}
     @restrict_list = {}
+    @restrict_list2 = {}
+    @b_restrict_referenced = false
+    @b_post_code_generated = false
 
     @cell_list = {}
@@ -1803,4 +1843,7 @@
       set_specifier_list( Generator.get_statement_specifier )
     end
+    if TECSGEN.post_coded?
+      @b_post_code_generated = true
+    end
     set_f_def f_def
 
@@ -1820,6 +1863,7 @@
     if ! @in_composite then
       # if @celltype.instance_of? Celltype then
+      if @celltype then  # composite でも呼びだす, エラー時 nil
         @celltype.new_cell self
-      # end
+      end
       @@cell_list << self
     end
@@ -2132,4 +2176,18 @@
   end
 
+  #=== Cell# composite のセルか？
+  def is_of_composite?
+    if @celltype.kind_of? CompositeCelltype
+      return true
+    else
+      return false
+    end
+  end
+
+  #=== Cell# tmp_plugin_post_code.cdl で生成されたセルか？
+  def post_code_generated?
+    @b_post_code_generated
+  end
+
   # composite cell の port に対応する内部の cell の port の名前（リンク時に必要な名前）
   def get_real_global_name port_name
@@ -2219,4 +2277,6 @@
 
       # セルタイプ内で port_name の CompositeCelltypeJoin を探す（コード生成段階では必ず見つかる）
+      # print "get_real_cell: cell=#{@name} port=#{port_name}\n"
+      # pp @cell_list
       cj = @celltype.find_export( port_name )
 
@@ -2230,4 +2290,13 @@
   end
 
+  #=== Cell#get_real_celltype
+  #
+  def get_real_celltype( port_name )
+    if @celltype.instance_of?( CompositeCelltype ) then
+      return @celltype.get_real_celltype port_name
+    else
+      return @celltype
+    end
+  end
 
   #=== Cell# 受け口のport の参照カウントをアップする
@@ -2270,4 +2339,16 @@
       return "#{@global_name}_#{port_name}"
     end
+  end
+
+  #Cell#属性の初期値を得る
+  #attr_name::Symbol  必ず初期化されていないと Ruby 例外となる
+  def get_attr_initializer attr_name
+    val = @join_list.get_item( attr_name )
+    if val == nil then
+      val = (@celltype.find  attr_name).get_initializer
+    else
+      val = val.get_rhs
+    end
+    return val
   end
 
@@ -2520,6 +2601,12 @@
         else
           cell = j.get_rhs_cell2
-          next if cell == 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 プラグインで生成されたセルの受け口が見つからないケース (のハズ)
+            cdl_error( "entry '$1' not found in '$2' refered from $3.$4", j.get_rhs_port2, cell.get_name, @name, j.get_name )
+            next
+          end
           dbgPrint( "set_port_reference_count: #{@name}.#{j.get_name} => #{cell.get_name}.#{port.get_name}\n")
           cell.port_referenced port
@@ -2966,72 +3053,111 @@
   #=== Cell#restrict を追加
   def add_restrict( entry_name, func_name, region_name_list )
-    if @restrict_list[ entry_name ] then
-      if @restrict_list[ entry_name ][ func_name ] then
-        @restrict_list[ entry_name ][ func_name ].each{ |rn|
-          if region_name_list.include? rn then
-            # p func_name
-            name = func_name ? entry_name : entry_name+"."+func_name
-            cdl_warning( "W9999 $1 restrict region duplicate $2", name, rn )
+    if @restrict_list[ entry_name ] == nil then
+      @restrict_list[ entry_name ] = {}
+      @restrict_list2[ entry_name ] = {}
+    end
+    if @restrict_list[ entry_name ][ func_name ] == nil then
+      @restrict_list[ entry_name ][ func_name ] = []
+      @restrict_list2[ entry_name ][ func_name ] = []
+    end
+    region_name_list.each { |rp|
+      @restrict_list[ entry_name ][ func_name ] << rp
+      # p "Class: " + rp.to_s
+      obj = Namespace.find rp
+      if ( obj.kind_of? Region ) then
+        @restrict_list2[ entry_name ][ func_name ] << obj.get_domain_root
+      else
+        cdl_error( "S9999 $1 not found or not region", rp.to_s )
+      end
+    }
+  end
+
+  #=== Cell#check_restrict_list
+  def check_restrict_list
+    # p "check_restrict_list"
+    @restrict_list.each{ |entry_name, func_hash|
+      func_hash.each{ |func_name, region_list|
+        region_list.each{ |rp|
+          obj = Namespace.find rp
+          if ( obj.kind_of? Region ) then
+            if obj.get_domain_root != @region.get_domain_root then
+            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 から呼出すことを想定した許可
+            end
+          else
+            cdl_error( "S9999 $1 not region", rp.to_s )
+          end
+        }
+      }
+    }
+  end
+
+  #=== Cell#callable?
+  def callable?( callee_cell, entry_name, func_name )
+    # p "callable? #{@name}"
+    res = callee_cell.callable_from?( entry_name, func_name, self )
+    dbgPrint "callable? #{callee_cell.get_namespace_path}.#{entry_name}.#{func_name} from #{@NamespacePath} is #{res}\n"
+    return res
+  end
+
+  #=== Cell#callable_from? (private)
+  def callable_from?( entry_name, func_name, caller_cell )
+    @b_restrict_referenced = true
+    if @restrict_list.length == 0 then
+      return true
+    end
+
+    dr = caller_cell.get_region.get_domain_root
+    if @restrict_list[entry_name] then
+      if @restrict_list[entry_name][func_name] then
+        @restrict_list2[entry_name][func_name].each{ |region|
+          if dr == region then
+            return true
+          end
+        }
+      elsif @restrict_list[entry_name][nil] then
+        @restrict_list2[entry_name][nil].each{ |region|
+          if dr == region then
+            return true
           end
         }
       else
-        @restrict_list[ entry_name ][ func_name ] = region_name_list
-      end
-    else
-      func_list = { }
-      func_list[ func_name ] = region_name_list
-      @restrict_list[ entry_name ] = func_list
-    end
-    # pp @restrict_list
-  end
-
-  #=== Cell#check_restrict_list
-  def check_restrict_list
-    @restrict_list.each{ |entry_name, func_hash|
-      func_hash.each{ |func_name, region_list|
-        region_list.each{ |rn|
-          obj = Namespace.find [ rn ]
-          if ( obj.kind_of? Region ) then
-            if obj.get_domain_root != @region.get_domain_root then
-            else
-              cdl_warning( "W9999 $1 in same domain", rn )
-            end
-          else
-            cdl_error( "S9999 $1 not region", region )
-          end
-        }
-      }
-    }
-  end
-
-  #=== Cell#callable?
-  def callable?( callee_cell, entry_name, func_name )
-    res = callee_cell.callable_from?( entry_name, func_name, self )
-    dbgPrint "callable? #{callee_cell.get_namespace_path}.#{entry_name}.#{func_name} from #{@NamespacePath} is #{res}\n"
-    return res
-  end
-
-  #=== Cell#callable_from? (private)
-  def callable_from?( entry_name, func_name, caller_cell )
-    if @restrict_list.length == 0 then
+        return false
+      end
+    else
+      return false
+    end
+  end
+
+  #=== Cell#get_callable_regions( entry_name, func_name )
+  # func_name=nil の場合、entry_name の可否をチェック数る
+  # nil が返る場合、制限されていないことを意味する
+  def get_restricted_regions( entry_name, func_name )
+    # p "get_restricted_regions #{@name}"
+    @b_restrict_referenced = true
+    if @restrict_list[entry_name] then
+      if @restrict_list[entry_name][func_name] then
+        return @restrict_list2[entry_name][func_name]
+      else
+        return @restrict_list2[entry_name][nil]
+      end
+    end
+    return nil
+  end
+
+  #=== Cell#has_ineffective_restrict_specifier
+  # restrict 指定子が指定されていて、参照されていない場合 true
+  # 参照は、HRPSVCPlugin のみ
+  def has_ineffective_restrict_specifier
+    if @restrict_list.length != 0 && @b_restrict_referenced == false then
       return true
-    end
-
-    if @restrict_list[entry_name] then
-      if @restrict_list[entry_name][nil] &&
-         @restrict_list[entry_name][nil].include?( caller_cell.get_region.get_domain_root.get_name )then
-        return true
-      end
-      if @restrict_list[entry_name][func_name] &&
-         @restrict_list[entry_name][func_name].include?( caller_cell.get_region.get_domain_root.get_name )then
-        return true
-      else
-        return false
-      end
-    else
-      return true
-    end
-  end
-  
+    else
+      return false
+    end
+  end
+
   def show_tree( indent )
     indent.times { print "  " }
@@ -3709,4 +3835,8 @@
   end
 
+  def get_global_name
+    @global_name
+  end
+
   def get_port_list
     @port_list
@@ -3723,4 +3853,16 @@
   def get_internal_allocator_list
     @internal_allocator_list
+  end
+
+  #== CompositeCelltype#get_real_celltype
+  # port_name に接続されている内部のセルタイプを得る
+  def get_real_celltype( port_name )
+    cj = find_export port_name
+    inner_celltype = cj.get_cell.get_celltype
+    if inner_celltype.instance_of? CompositeCelltype then
+      return inner_celltype.get_real_celltype
+    else
+      return inner_celltype
+    end
   end
 
@@ -3936,5 +4078,5 @@
     else
       # entry port optimize
-      if $unopt then
+      if $unopt || $unopt_entry then
         # 最適化なし
         @b_VMT_useless = false                     # VMT 不要 (true の時 VMT を介することなく呼出す)
@@ -4260,9 +4402,21 @@
 
   def is_VMT_useless?                     # VMT 関数テーブルを使用しない
-   @b_VMT_useless
+    if @port_type == :ENTRY && $unopt_entry == true then
+      # プラグインから $unopt_entry を設定するケースのため
+      # ここで読み出すときに、false を返す (reset_optimize での設定変更は速すぎる)
+      return false
+    else
+      return @b_VMT_useless
+    end
   end
 
   def is_skelton_useless?                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
-    @b_skelton_useless
+    if @port_type == :ENTRY && $unopt_entry == true then
+      # プラグインから $unopt_entry を設定するケースのため
+      # ここで読み出すときに、false を返す (reset_optimize での設定変更は速すぎる)
+      return false
+    else
+      return @b_skelton_useless
+    end
   end
 
@@ -4801,7 +4955,7 @@
       if ! c.get_f_def then   # Namespace の @cell_list にはプロトタイプが含まれるケースあり
         if c.get_f_ref then
-          cdl_error( "S1093 $1 : undefined cell" , c.get_namespace_path.get_path_str )
+          c.cdl_error( "S1093 $1 : undefined cell" , c.get_namespace_path.get_path_str )
         elsif $verbose then
-          cdl_warning( "W1006 $1 : only prototype, unused and undefined cell" , c.get_namespace_path.get_path_str )
+          c.cdl_warning( "W1006 $1 : only prototype, unused and undefined cell" , c.get_namespace_path.get_path_str )
         end
       else
@@ -4810,5 +4964,8 @@
         # if c.get_f_ref == false && c.is_generate? && ct && ct.is_inactive? then
         if c.get_f_ref == false && ct && ct.is_inactive? then
-          cdl_warning( "W1007 $1 : non-active cell has no entry join and no factory" , c.get_namespace_path.get_path_str )
+          c.cdl_warning( "W1007 $1 : non-active cell has no entry join and no factory" , c.get_namespace_path.get_path_str )
+        end
+        if c.has_ineffective_restrict_specifier then
+          c.cdl_warning( "W9999: $1 has ineffective restrict specifier", c.get_namespace_path.get_path_str )
         end
       end
@@ -5005,4 +5162,16 @@
   end
 
+  #== Namespace (Region) に属するセルのリスト
+  def get_cell_list
+    @cell_list
+  end
+
+  #== Namespace (Region)# 子リージョンのリスト
+  #
+  # リージョンは Namespace クラスで namespace として記憶されている
+  def get_region_list
+    @namespace_list
+  end
+  
   def show_tree( indent )
     indent.times { print "  " }
@@ -5601,4 +5770,5 @@
           next_cell_nsp       = @through_generated_list[ i + 1 ].get_cell_namespace_path
           next_port_name      = @through_generated_list[ i + 1 ].get_through_entry_port_name
+          next_port_subscript = @through_generated_list[ i + 1 ].get_through_entry_port_subscript
         rescue Exception => evar
           cdl_error( "S1124 $1: plugin function failed: \'get_through_entry_port_name\'" , plugin_name )
@@ -5619,4 +5789,5 @@
         next_cell      = @cell
         next_port_name = @port_name
+        next_port_subscript = @rhs_subscript
 
         if next_cell == nil then
@@ -5630,5 +5801,5 @@
         # 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 )
+        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] は同じ
         # 共用しないようにするには、見つからなかったことにすればよい
@@ -5643,5 +5814,5 @@
         plClass = load_plugin( plugin_name, ThroughPlugin )
         if( plClass ) then
-          gen_through_cell_code_and_parse( plugin_name, i, next_cell, next_port_name, plClass )
+          gen_through_cell_code_and_parse( plugin_name, i, next_cell, next_port_name, next_port_subscript, plClass )
         end
       else
@@ -5656,5 +5827,5 @@
           # 生成したものを 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, @through_generated_list[i] )
+          @through_list[i][3].add_cell_port_through_plugin( @cell.get_global_name, @port_name, @rhs_subscript, @through_generated_list[i] )
         end
       end
@@ -5690,5 +5861,5 @@
 
   #=== Join# through プラグインを呼び出して CDL 生成させるとともに、import する
-  def gen_through_cell_code_and_parse( plugin_name, i, next_cell, next_port_name, plClass )
+  def gen_through_cell_code_and_parse( plugin_name, i, next_cell, next_port_name, next_port_subscript, plClass )
 
     through = @through_list[ i ]
@@ -5717,5 +5888,7 @@
 
     begin
-      plugin_object = plClass.new( "#{generating_cell_name}".to_sym, plugin_arg.to_s, next_cell, "#{next_port_name}".to_sym, @definition.get_signature, @celltype, caller_cell )
+      plugin_object = plClass.new( generating_cell_name.to_sym, plugin_arg.to_s,
+                                   next_cell, next_port_name.to_sym, next_port_subscript,
+                                   @definition.get_signature, @celltype, caller_cell )
       plugin_object.set_locale @locale
     rescue Exception => evar
@@ -5912,5 +6085,12 @@
   end
 
-  def get_rhs_subscript
+  # 末尾数字1 : CDL で指定された、右辺のセルを返す
+  def get_rhs_cell1   # get_cell と同じ
+    @cell
+  end
+  def get_rhs_port1   # get_port_name 同じ
+    @port_name
+  end
+  def get_rhs_subscript1
     @rhs_subscript
   end
@@ -5922,7 +6102,5 @@
     # through 指定あり？
     if @through_list[0] then
-      # mikan through で生成したものが root namespace 限定
       # through で生成されたセルを探す
-#      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 のプラグインで生成されたポート名のポートを探す (composite なら内部の繋がるポート)
@@ -5931,4 +6109,16 @@
       # ポートを返す(composite なら内部の繋がるポートを返す)
       return @cell.get_real_port( @port_name )
+    end
+  end
+
+  #=== Join# 右辺の配列添数を得る
+  #    右辺が through の場合は挿入されたセルの添数
+  #    右辺が composite の場合は、内部の繋がるセルのポートの添数 (composite では変わらない)
+  #    このメソッドは get_rhs_cell,  と対になっている
+  def get_rhs_subscript
+    if @through_list[0] then
+      return @through_generated_list[0].get_through_entry_port_subscript
+    else
+      return @rhs_subscript
     end
   end
@@ -6568,5 +6758,5 @@
 end
 
-#== Domain
+#== DomainType
 #
 # region の domain を記憶するクラス
@@ -6607,4 +6797,5 @@
       return if pluginClass == nil
       @plugin = pluginClass.new( @region, @name, @option )
+      @plugin.set_locale @locale
     end
   end
@@ -6624,5 +6815,5 @@
   end
 
-  #== Domain リージョンの Hash を得る
+  #== DomainType リージョンの Hash を得る
   # @@domain_regions の説明参照
   def self.get_domain_regions
@@ -6636,4 +6827,10 @@
   def get_option
     @option
+  end
+
+  #== DomainType#ドメイン種別を得る
+  #return::Symbol :kernel, :user, :OutOfDomain
+  def get_kind
+    @plugin.get_kind
   end
 
@@ -6697,4 +6894,5 @@
 
     if @@domain_name then
+      dbgPrint "Region=#{name} domain_type=#{@@domain_name} option=#{@@domain_option}\n"
       domain_option = CDLString.remove_dquote @@domain_option.to_s
       @domain_type = DomainType.new( self, @@domain_name, domain_option )
@@ -6945,4 +7143,10 @@
   end
 
+  #== Region# ルートリージョン
+  # ルートリージョンは、namespace のルートと同じインスタンス
+  def selfget_root
+    Namespace.get_root
+  end
+
   def next_in_through_count
     @in_through_count += 1
@@ -6978,10 +7182,16 @@
   #=== Region# through プラグインで、この region から cell_name.port_name へのプラグインオブジェクトを登録
   # mikan namesppace 対応 (cell_name)
-  def add_cell_port_through_plugin( cell_name, port_name, through_plugin_object )
-    @cell_port_throug_plugin_list[ "#{cell_name}.#{port_name}" ] = through_plugin_object
-  end
-
-  def find_cell_port_through_plugin( cell_name, port_name )
-    return @cell_port_throug_plugin_list[ "#{cell_name}.#{port_name}" ]
+  def add_cell_port_through_plugin( cell_name, port_name, subscript, through_plugin_object )
+    if subscript then
+      subscript = '[' + subscript.to_s + ']'
+    end
+    @cell_port_throug_plugin_list[ "#{cell_name}.#{port_name}#{subscript}" ] = through_plugin_object
+  end
+
+  def find_cell_port_through_plugin( cell_name, port_name, subscript )
+    if subscript then
+      subscript = '[' + subscript.to_s + ']'
+    end
+    return @cell_port_throug_plugin_list[ "#{cell_name}.#{port_name}#{subscript}" ]
   end
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/ctypes.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/ctypes.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/ctypes.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -122,5 +122,6 @@
       #   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 )
+#      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 )
+      self.to_long      
       return self
     else
@@ -185,4 +186,11 @@
   end
 
+  def to_long
+    if @bit_size != -64 then
+      cdl_warning( "W9999 long specified for $1" , get_type_str )
+    else
+      @bit_size = -128  # @bit_size = -128 : long double
+    end
+  end
 end
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/expression.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/expression.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/expression.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2017 by TOPPERS Project
+#   Copyright (C) 2008-2019 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -122,4 +122,5 @@
 
 class Namespace
+  @@domain_gen_factory_list = nil
   def generate
 
@@ -135,4 +136,7 @@
           return
         end
+        if instance_of? Region then
+          @@domain_gen_factory_list = {}   # create hash
+        end
       end
 
@@ -141,4 +145,13 @@
       gen_global_header
 
+      if ( instance_of? Region ) && get_domain_type != nil then
+        # p "*******************  domain_type: #{get_domain_type.get_name}  ****************"
+        domain_type = get_domain_type
+        if @@domain_gen_factory_list[ domain_type ] == nil then
+          @@domain_gen_factory_list[ domain_type ] = self
+          domain_type.gen_factory
+        end
+      end
+      
       # signature のコードを生成
       @signature_list.each { |s|
@@ -455,5 +468,5 @@
       }
     end
-	f.print "	rm -f $(CELLTYPE_COBJS) $(TECSGEN_COBJS) $(PLUGIN_COBJS) $(OTHER_OBJS) $(TARGET) #{timestamp}\n"
+	  f.print "	rm -f $(CELLTYPE_COBJS) $(TECSGEN_COBJS) $(PLUGIN_COBJS) $(OTHER_OBJS) $(TARGET) #{timestamp}\n"
     if $generating_region == @@root_namespace then
       f.print "	rm -rf $(GEN_DIR)\n"
@@ -465,7 +478,6 @@
       f.print "tecs : $(PRE_TECSGEN_TARGET) $(TIMESTAMP) $(POST_TECSGEN_TARGET)\n\n"
       f.print "$(TIMESTAMP) : $(TECS_IMPORTS)\n"
-      f.print "	$(TECSGEN) #{TECSGEN.subst_tecspath( $arguments, true )}\n"
+      f.print "	$(TECSGEN) #{TECSGEN.subst_tecspath( $arguments, true )}\n\n"
       # f.print "	touch $(TIMESTAMP)\n\n"
-
     else
       f.print "tecs:\n"
@@ -473,4 +485,44 @@
     end
 
+    # tecsflow:, tcflow ターゲット
+    if $generating_region.get_n_cells != 0 || $generating_region == @@root_namespace then
+      f.print "#####  TECSFlow targets  #####\n"
+    end
+
+    if Region.get_link_roots.length > 1 && $generating_region == @@root_namespace then
+      tecsflow_target = "tecsflow_sub"
+      if $generating_region.get_n_cells > 0 then
+        f.print "tecsflow: tecs tecsflow_sub\n"
+      else
+        f.print "tecsflow:\n"
+      end
+      Region.get_link_roots.each {|region|
+        if region.get_n_cells > 0 then
+          f.print "\tcd #{region.get_global_name}; make tecsflow\n"
+        end
+      }
+      f.print "\n"
+    else
+      tecsflow_target = "tecsflow"
+    end
+
+    if $generating_region.get_n_cells != 0 then
+      f.print "#{tecsflow_target} : $(GEN_DIR)/tecsgen.rbdmp tcflow\n"
+      f.print "\ttecsflow -g $(GEN_DIR)\n\n"
+      f.print "tecsflow_u : $(GEN_DIR)/tecsgen.rbdmp tcflow\n"
+      f.print "\ttecsflow -g $(GEN_DIR) -U\n\n"
+      f.print "$(GEN_DIR)/tecsgen.rbdmp : tecs\n\n"
+      f.print "tcflow : tecs\n"
+      f.print "\tmake tcflow_exec\n\n"
+      f.print "tcflow_exec : $(GEN_DIR)/tcflow.rbdmp\n"
+      f.print "$(GEN_DIR)/tcflow.rbdmp : $(CELLTYPE_SRCS) $(PLUGIN_CELLTYPE_SRCS)\n"
+      f.print "\ttcflow -g $(GEN_DIR) -c '$(CC) -E -DTECSFLOW -DTECSGEN $(CFLAGS) -I ./' $^\n"
+    end
+
+    if $generating_region.get_n_cells != 0 || $generating_region == @@root_namespace then
+      f.print "#####  end TECSFlow targets  #####\n\n"
+    end
+
+    # generic %.o : %.c
     f.print "# generic target for objs\n"
     f.print "$(_TECS_OBJ_DIR)%.o : %.#{$c_suffix}\n"
@@ -492,4 +544,46 @@
     ### Makefile.tecsgen の生成
     f = AppFile.open( "#{$gen}/Makefile.tecsgen" )
+
+    f.print <<EOT
+# generated automatically by tecsgen.
+# This file is not intended to modify.
+#
+# Makefile variables below are defined.
+#  TECS_IMPORT_CDLS          .cdl files improted by import statement
+#  SIGNATURE_HEADERS         .h files of signature
+#  CELLTYPE_TECSGEN_HEADERS  .h files of celltype
+#  CELLTYPE_FACTORY_HEADERS  .h files of celltype's factory
+#  TECS_HEADERS              summary of .h files above
+#  TECS_INLINE_HEADERS       .h files of celltype inline header
+#  PLUGIN_INLINE_HEADERS     .h files of plugin generated inline header
+#
+#  TECS_COBJS                .o files of TECS
+#                            = $(TECSGEN_COBJS)+$(PLUGIN_COBJS)+$(CELLTYPE_COBJS)
+#                            = $(TECS_KERNEL_COBJS)+$(TECS_KERNEL_COBJS)+$(TECS_OUTOFDOMAIN_COBJS)
+#                            = $(TECSGEN_domain_COBJS)+$(PLUGIN_domain_COBJS)+$(CELLTYPE_domain_COBJS) for each domain
+#
+#  TECSGEN_COBJS             .o files of celltype_tecsgen.c
+#  CELLTYPE_COBJS            .o files of celltype.c (celltype code)
+#  PLUGIN_COBJS              .o files of plugin generated .c files
+#
+#  TECSGEN_SRCS              .c files of celltype_tecsgen.c
+#  CELLTYPE_SRCS             .c files of celltype.c (celltype code)
+#  PLUGIN_SRCS               .c files of plugin generated
+#  PLUGIN_CELLTYPE_SRCS      .c files of plugin generated celltype.c (celltype code)
+#  PLUGIN_TECSGEN_SRCS       .c files of plugin generated celltype_tecsgen.c
+#
+# Variables for domain
+#  TECS_DOMAINS             domain names
+#  TECS_KERNEL_COBJS        .o files of kernel domain (tecsgen, celltype, plugin)
+#  TECS_USER_COBJS          .o files of user domain (tecsgen, celltype, plugin)
+#  TECS_OUTOFDOMAIN_COBJS   .o files of OutOfDomain (tecsgen, celltype, plugin)
+#  TECSGEN_domain_COBJS     .o files of celltype_tecsgen.c files for each domain
+#  PLUGIN_domain_COBJS      .o files of plugin generated .c files for each domain
+#  CELLTYPE_domain_COBJS    .o files of celltype.c files for each domain
+#  TECSGEN_domain_SRCS      .c files of celltype_domain_tecsgen.c
+#  PLUGIN_domain_SRCS       .c files of plugin generated .c files for each domain
+#  CELLTYPE_domain_SRCS     .c files of celltype.c files for each domain
+
+EOT
 
     f.print( "TECS_IMPORT_CDLS =" )
@@ -546,4 +640,5 @@
     DomainType.get_domain_regions.each{ |dt, regions|
       # domain_type は一つのノードには、一つしかないので、このループは、必ず一回しか回らない
+        ###   mikan 複数のノードがあり、異なる domain_type が指定される可能性はある
       domain_regions = regions
       domain_type = dt
@@ -588,5 +683,38 @@
       f.print( "\n\n" )
 
-      f.print( "# TECS_COBJS: objects from sources which are automatically generated by tecsgen\n" )
+      f.print( "# TECS_KERNEL_COBJS: objects belong to kernel domain\n" )
+      f.print( "TECS_KERNEL_COBJS = \\\n" )
+      domain_regions.each{ |r|
+        if r.get_domain_type.get_kind == :kernel then
+          f.print( "	$(TECSGEN#{decideDomainNameProc.call r}_COBJS) \\\n" )
+          f.print( "	$(PLUGIN#{decideDomainNameProc.call r}_COBJS) \\\n" )
+          f.print( "	$(CELLTYPE#{decideDomainNameProc.call r}_COBJS) \\\n" )
+        end
+      }
+      f.print( "# TECS_KERNEL_COBJS terminator\n\n" )
+
+      f.print( "# TECS_USER_COBJS: objects belong to user domain\n" )
+      f.print( "TECS_USER_COBJS = \\\n" )
+      domain_regions.each{ |r|
+        if r.get_domain_type.get_kind == :user then
+          f.print( "	$(TECSGEN#{decideDomainNameProc.call r}_COBJS) \\\n" )
+          f.print( "	$(PLUGIN#{decideDomainNameProc.call r}_COBJS) \\\n" )
+          f.print( "	$(CELLTYPE#{decideDomainNameProc.call r}_COBJS) \\\n" )
+        end
+      }
+      f.print( "# TECS_USER_COBJS terminator\n\n" )
+
+      f.print( "# TECS_OUTOFDOMAIN_COBJS: objects belong to OutOfDomain\n" )
+      f.print( "TECS_OUTOFDOMAIN_COBJS = \\\n" )
+      domain_regions.each{ |r|
+        if r.get_domain_type.get_kind == :OutOfDomain then
+          f.print( "	$(TECSGEN#{decideDomainNameProc.call r}_COBJS) \\\n" )
+          f.print( "	$(PLUGIN#{decideDomainNameProc.call r}_COBJS) \\\n" )
+          f.print( "	$(CELLTYPE#{decideDomainNameProc.call r}_COBJS) \\\n" )
+        end
+      }
+      f.print( "# TECS_OUTOFDOMAIN_COBJS terminator\n\n" )
+      
+      f.print( "# TECSGEN_COBJS: objects from sources which are automatically generated by tecsgen\n" )
       f.print( "TECSGEN_COBJS = \\\n" )
       domain_regions.each{ |r|
@@ -622,5 +750,5 @@
 
     ###
-    f.print( "# TECS_COBJS: objects from sources which are automatically generated by tecsgen\n" )
+    f.print( "# TECSGEN_COBJS: objects from sources which are automatically generated by tecsgen\n" )
     domain_regions.each{ |r|
       nsp = decideDomainNameProc.call( r )
@@ -656,12 +784,32 @@
 
     f.print( "# PLUGIN_SRCS: sources automatically generated by plugin\n" )
+    f.print( "PLUGIN_CELLTYPE_SRCS = \\\n" )
     domain_regions.each{ |r|
       nsp = decideDomainNameProc.call( r )
-      f.print( "PLUGIN#{nsp}_SRCS = \\\n" )
-      gen_celltype_names_domain( f, "	$(GEN_DIR)/", "_tecsgen.#{$c_suffix} \\\n", domain_type, r, true )
-      gen_celltype_names_domain2( f, "	$(GEN_DIR)/", ".#{$c_suffix} \\\n", domain_type, r, true, false )
-      f.print( "# PLUGIN#{nsp}_SRCS terminator\n\n" )
-    }
-
+      f.print( "  $(PLUGIN#{nsp}_CELLTYPE_SRCS)\\\n" )
+    }
+    f.print( "# PLUGIN_CELLTYPE_SRCS terminator\n\n" )
+    f.print( "PLUGIN_TECSGEN_SRCS = \\\n" )
+    domain_regions.each{ |r|
+      nsp = decideDomainNameProc.call( r )
+      f.print( "  $(PLUGIN#{nsp}_TECSGEN_SRCS)\\\n" )
+    }
+    f.print( "# PLUGIN_TECSGEN_SRCS terminator\n\n" )
+    domain_regions.each{ |r|
+      nsp = decideDomainNameProc.call( r )
+      f.print( "PLUGIN#{nsp}_SRCS = $(PLUGIN#{nsp}_CELLTYPE_SRCS) $(PLUGIN#{nsp}_TECSGEN_SRCS)\n\n" )
+      f.print( "PLUGIN#{nsp}_CELLTYPE_SRCS = \\\n" )
+      gen_celltype_names_domain2( f, "", ".#{$c_suffix} \\\n", domain_type, r, true, false )
+      f.print( "# PLUGIN#{nsp}_CELLTYPE_SRCS terminator\n\n" )
+      nsp = decideDomainNameProc.call( r )
+      f.print( "PLUGIN#{nsp}_TECSGEN_SRCS = \\\n" )
+      gen_celltype_names_domain( f, "", "_tecsgen.#{$c_suffix} \\\n", domain_type, r, true )
+      f.print( "# PLUGIN#{nsp}_TECSGEN_SRCS terminator\n\n" )
+    }
+
+    f.print( "# CELLTYPE_SRCS: sources of celltype code written by user\n" )
+     f.print( "CELLTYPE_SRCS = \\\n" )
+     gen_celltype_names( f, "	", ".#{$c_suffix} \\\n", false, false )
+      f.print( "# CELLTYPE_SRCS terminator\n\n" )
     f.close
 
@@ -779,4 +927,23 @@
     @namespace_list.each{ |ns|
       ns.travers_all_signature_proc proc
+    }
+  end
+
+  #=== Namespace#すべてのセルタイプをたどる
+  def travers_all_celltype # ブロック引数 { |celltype|  }
+    proc = Proc.new    # このメソッドのブロック引数
+    @celltype_list.each{ |ct|
+      proc.call ct
+    }
+    @namespace_list.each{ |ns|
+      ns.travers_all_celltype_proc proc
+    }
+  end
+  def travers_all_celltype_proc proc
+    @celltype_list.each{ |ct|
+      proc.call ct
+    }
+    @namespace_list.each{ |ns|
+      ns.travers_all_celltype_proc proc
     }
   end
@@ -1023,5 +1190,9 @@
     gen_ph_get_cellcb f
     gen_ph_attr_access f          if @n_attribute_rw > 0 || @n_attribute_ro > 0 || @n_var > 0
-    gen_ph_cp_fun_macro f         if @n_call_port > 0
+    f.print "#ifndef TECSFLOW\n"
+    gen_ph_cp_fun_macro f, false  if @n_call_port > 0
+    f.print "#else  /* TECSFLOW */\n"
+    gen_ph_cp_fun_macro f, true   if @n_call_port > 0
+    f.print "#endif /* TECSFLOW */\n"
 #    gen_ph_abstract_ep_des_type f
 
@@ -1247,4 +1418,6 @@
   def gen_ph_info f
 
+    yn_multi_domain = "no"
+    yn_multi_domain = "yes" if multi_domain?
     yn_idx_is_id = "no"
     yn_idx_is_id = "yes"  if @idx_is_id
@@ -1255,4 +1428,8 @@
     yn_rom       = "no"
     yn_rom       = "yes"  if $rom
+    yn_has_CB    = "no"
+    yn_has_CB    = "yes"  if has_CB?
+    yn_has_INIB  = "no"
+    yn_has_INIB  = "yes"  if has_INIB?
     yn_cb_init   = "no"
     yn_cb_init   = "yes"  if need_CB_initializer?
@@ -1263,8 +1440,9 @@
  * celltype          :  #{@name}
  * global name       :  #{@global_name}
+ * multi-domain      :  #{yn_multi_domain}
  * idx_is_id(actual) :  #{yn_idx_is_id}(#{yn_idx_is_id_act})
  * singleton         :  #{yn_singleton}
- * has_CB            :  #{has_CB?}
- * has_INIB          :  #{has_INIB?}
+ * has_CB            :  #{yn_has_CB}
+ * has_INIB          :  #{yn_has_INIB}
  * rom               :  #{yn_rom}
  * CB initializer    :  #{yn_cb_init}
@@ -1595,5 +1773,5 @@
       f.print( "#define #{@global_name}_GET_CELLCB(idx) ((void *)0)\n" )
     elsif @idx_is_id_act then   # mikan 単一のセルの場合の最適化, idx_is_id でない場合
-      f.print( "#define #{@global_name}_GET_CELLCB(idx) (#{@global_name}_CB_tab[(idx) - #{@global_name}_ID_BASE])\n" )
+      f.print( "#define #{@global_name}_GET_CELLCB(idx) (#{@global_name}_CB_ptab[(idx) - #{@global_name}_ID_BASE])\n" )
     else
       f.print( "#define #{@global_name}_GET_CELLCB(idx) (idx)\n" )
@@ -1799,6 +1977,6 @@
   end
 
-  def gen_ph_cp_fun_macro f
-    if @n_call_port >0 then
+  def gen_ph_cp_fun_macro f, b_flow
+    if @n_call_port >0 && b_flow == false then
       f.printf( TECSMsg.get( :CPM_comment ) , "#_CPM_#" )
     end
@@ -1856,5 +2034,7 @@
 
         # 関数名の出力(標準：受け口ディスクリプタから VMT の関数名、最適化：受け口関数 or 受け口ディスクリプタ)
-        if ! p.is_VMT_useless? then
+        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
@@ -1891,5 +2071,6 @@
 
         # 受け口情報の出力(標準：受け口ディスクリプタ、最適化：IDX など)
-        if ! p.is_skelton_useless? && ! p.is_cell_unique? then
+        if b_flow then
+        elsif ! p.is_skelton_useless? && ! p.is_cell_unique? then
           # 標準コード
           if @singleton then
@@ -1969,5 +2150,5 @@
         p_cellcb = "    #{@global_name}_CB *p_cellcb = p_that;\n"
         delim = ", "
-        cb = "p_that#{inib}->"
+        cb = "p_cellcb#{inib}->"
       end
 
@@ -2616,23 +2797,45 @@
         f.print "extern  #{@global_name}_INIB  #{@global_name}_SINGLE_CELL_INIB;\n"
       end
-
-#     @ordered_cell_list.each{ |c|
-#        f.print "extern  #{@global_name}_CB  #{@global_name}_#{c.get_name}_CB;\n"
-#      }
-
       f.print "\n"
-    elsif @idx_is_id_act then
-      f.print "extern #{@global_name}_CB  *#{@global_name}_CB_tab[];\n"
+    elsif @b_need_ptab then
+      f.printf( TECSMsg.get( :SCP_comment ),  "#_MCPP_#" )
+      if has_CB? then
+        f.print "extern #{@global_name}_CB  *const #{@global_name}_CB_ptab[];\n"
+        @ordered_cell_list.each{ |c|
+          if c.is_generate? then                           # 生成対象か？
+            name_array = get_name_array c
+            f.print "extern #{@global_name}_CB  #{name_array[4]};\n"
+          end
+        }
+      elsif has_INIB?
+        f.print "extern #{@global_name}_INIB  *const #{@global_name}_INIB_ptab[];\n"
+        @ordered_cell_list.each{ |c|
+          if c.is_generate? then                           # 生成対象か？
+            name_array = get_name_array c
+            f.print "extern #{@global_name}_INIB  #{name_array[11]};\n"
+          end
+        }
+      end
     else
-      f.print "extern #{@global_name}_CB  #{@global_name}_CB_tab[];\n"
+      f.printf( TECSMsg.get( :SCP_comment ),  "#_MCPB_#" )
+      if has_CB? then
+        f.print "extern #{@global_name}_CB  #{@global_name}_CB_tab[];\n"
+      elsif has_INIB?
+        f.print "extern #{@global_name}_INIB  #{@global_name}_INIB_tab[];\n"
+      end
     end
   end
 
   def gen_ph_INIB_as_CB f
-
+    # ここは、手抜きである。本来なら INIB を出力すべき
     if ! has_CB? && has_INIB? then
       f.printf( TECSMsg.get( :DCI_comment ),  "#_DCI_#" )
-      f.print "#define #{@global_name}_CB_tab           #{@global_name}_INIB_tab\n"
-      f.print "#define #{@global_name}_SINGLE_CELL_CB   #{@global_name}_SINGLE_CELL_INIB\n"
+      if @singleton then
+        f.print "#define #{@global_name}_SINGLE_CELL_CB   #{@global_name}_SINGLE_CELL_INIB\n"
+      elsif @b_need_ptab then
+        f.print "#define #{@global_name}_CB_ptab           #{@global_name}_INIB_ptab\n"
+      else
+        f.print "#define #{@global_name}_CB_tab           #{@global_name}_INIB_tab\n"
+      end
       f.print "#define #{@global_name}_CB               #{@global_name}_INIB\n"
       f.print "#define tag_#{@global_name}_CB           tag_#{@global_name}_INIB\n"
@@ -2658,13 +2861,15 @@
       f.printf( TECSMsg.get( :FEC_comment ), "#_FEC_#" )
 
-      if @idx_is_id_act then
+      if @b_need_ptab then
         amp = ''
+        tab = 'ptab'
       else
         amp = '&'
+        tab = 'tab'
       end
       f.print <<EOT
 #define FOREACH_CELL(i,p_cb)   \\
     for( (i) = 0; (i) < #{@global_name}_N_CELL; (i)++ ){ \\
-       #{necessity}(p_cb) = #{amp}#{@global_name}_CB_tab[i];
+       #{necessity}(p_cb) = #{amp}#{@global_name}_CB_#{tab}[i];
 
 #define END_FOREACH_CELL   }
@@ -2799,6 +3004,6 @@
         if @singleton then
           f.print "\t#{that}_inib = &#{@global_name}_SINGLE_CELL_INIB;\n\n"
-        elsif @idx_is_id_act
-          f.print "\t#{that}_inib = #{@global_name}_INIB_tab[(i)];\n\n"
+        elsif @b_need_ptab then
+          f.print "\t#{that}_inib = #{@global_name}_INIB_ptab[(i)];\n\n"
         else
           f.print "\t#{that}_inib = &#{@global_name}_INIB_tab[(i)];\n\n"
@@ -3397,5 +3602,5 @@
         fs.each{ |r, f| f.print "#{@global_name}_INIB #{@global_name}_SINGLE_CELL_INIB = \n" }
         indent = 0
-      elsif ! @idx_is_id_act then
+      elsif ! @b_need_ptab then
         fs.each{ |r, f| f.print "#{@global_name}_INIB #{@global_name}_INIB_tab[] = {\n" }
         indent = 1
@@ -3418,5 +3623,5 @@
 
         print_indent( f, indent )
-        if @idx_is_id_act then
+        if @b_need_ptab then
           f.print "const #{@global_name}_INIB #{name_array[5]} = "
         end
@@ -3428,5 +3633,5 @@
         unless @singleton then
           # 1 つの cell INIB の終わり
-          if @idx_is_id_act then
+          if @b_need_ptab then
             f.print( "};\n\n" )
           else
@@ -3435,5 +3640,5 @@
         end
       }
-      if ! @idx_is_id_act then
+      if ! @b_need_ptab then
         fs.each{ |r, f| f.print( "};\n\n" ) }
       end
@@ -3450,5 +3655,5 @@
           fs.each{ |r, f| f.print "struct tag_#{@global_name}_CB #{@global_name}_SINGLE_CELL_CB = \n" }
           indent = 0
-        elsif ! @idx_is_id_act then
+        elsif ! @b_need_ptab then
           fs.each{ |r, f| f.print "struct tag_#{@global_name}_CB #{@global_name}_CB_tab[] = {\n" }
           indent = 1
@@ -3471,5 +3676,5 @@
 
           print_indent( f, indent )
-          if @idx_is_id_act then
+          if @b_need_ptab then
             f.print "#{@global_name}_CB #{name_array[2]} = "
           end
@@ -3493,5 +3698,5 @@
           unless @singleton then
             # 1 つの cell CB の終わり
-            if @idx_is_id_act then
+            if @b_need_ptab then
               f.print( "};\n\n" )
             else
@@ -3500,5 +3705,5 @@
           end
         }
-        if ! @idx_is_id_act then
+        if ! @b_need_ptab then
           fs.each{ |r, f| f.print( "};\n\n" ) }
         end
@@ -3507,5 +3712,5 @@
           fs.each{ |r, f| f.print "struct tag_#{@global_name}_CB #{@global_name}_SINGLE_CELL_CB;\n" }
           indent = 0
-        elsif @idx_is_id_act then
+        elsif @b_need_ptab then
           @ordered_cell_list.each{ |c|
             next if ! c.is_generate?
@@ -3526,5 +3731,5 @@
   def gen_cell_cb_tab f
     indent = 0
-    if @idx_is_id_act then
+    if @b_need_ptab then
       if has_INIB? && ( $ram_initializer || ! has_CB? ) then
         f.print "/* ID to INIB table #_INTAB_# */\n"
@@ -3537,5 +3742,5 @@
         }
 
-        f.print "#{@global_name}_INIB *#{@global_name}_INIB_tab[] ={\n"
+        f.print "#{@global_name}_INIB *const #{@global_name}_INIB_ptab[] ={\n"
         @ordered_cell_list.each{ |c|
           if c.is_generate? then                           # 生成対象か？
@@ -3557,5 +3762,5 @@
         }
 
-        f.print "#{@global_name}_CB *#{@global_name}_CB_tab[] ={\n"
+        f.print "#{@global_name}_CB *const #{@global_name}_CB_ptab[] ={\n"
         @ordered_cell_list.each{ |c|
           if c.is_generate? then                           # 生成対象か？
@@ -3586,4 +3791,5 @@
   #   name_array[9] = @global_name    # celltype global name
   #   name_array[10] = cell.get_global_name # cell global name
+  #   name_array[11] = cell_INIB_proto #INIB name for proto type
   
   def get_name_array( cell )
@@ -3594,7 +3800,8 @@
       cell_CB_proto = "#{@global_name}_SINGLE_CELL_CB"
       cell_INIB_name = "#{@global_name}_SINGLE_CELL_INIB"
+      cell_INIB_proto = cell_INIB_name
       cell_ID = 0
     else
-      if ! @idx_is_id_act then
+      if ! @b_need_ptab then
         index = cell.get_id - cell.get_celltype.get_id_base
         cell_CB_name = "#{@global_name}_CB_tab[#{index}]"
@@ -3602,4 +3809,5 @@
         cell_CB_proto = "#{@global_name}_CB_tab[]"
         cell_INIB_name = "#{@global_name}_INIB_tab[#{index}]"
+        cell_INIB_proto = "#{@global_name}_INIB_tab[]"
       else
         cell_CB_name = "#{cell.get_global_name}_CB"
@@ -3607,11 +3815,7 @@
         cell_CB_proto = cell_CB_name
         cell_INIB_name = "#{cell.get_global_name}_INIB"
+        cell_INIB_proto = cell_INIB_name
       end
       cell_ID = cell.get_id
-    end
-    if @idx_is_id_act then
-      cell_IDX = cell_ID
-    else
-      cell_IDX = "&#{cell_CB_name}"
     end
 
@@ -3622,4 +3826,10 @@
     else
       cell_CBP = "NULL"    # CB も INIB もなければ NULL に置換
+    end
+
+    if @idx_is_id_act then
+      cell_IDX = cell_ID
+    else
+      cell_IDX = cell_CBP
     end
 
@@ -3636,4 +3846,5 @@
     name_array[9] = @global_name    # celltype global name
     name_array[10] = cell.get_global_name # cell global name
+    name_array[11] = cell_INIB_proto # INIB name for prototype
 
     return name_array
@@ -3820,6 +4031,6 @@
               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
-                name_array = ct.get_name_array( c )   # 呼び先セルタイプで name_array を得る
                 f.printf( "%-40s /* %s #_CCP2_# */\n", "#{name_array[7]},", p.get_name )
               else
@@ -4107,6 +4318,7 @@
       f = fs[ c.get_region.get_domain_root ]
 
-      ct = c.get_celltype
+      ct = c.get_celltype     # ct = self でも同じ
       jl = c.get_join_list
+      name_array = get_name_array( c )
 
       port = ct.get_port_list
@@ -4143,16 +4355,18 @@
               else
                 if has_CB? then
-                  if @singleton then
-                    f.print "    &#{@global_name}_SINGLE_CELL_CB,        /* CB */\n"
-                  else
-                    # f.print "    &#{@global_name}_#{c.get_name}_CB,\n"
-                    f.print "    &#{@global_name}_CB_tab[#{index}],      /* CB */\n"
-                  end
+                  # if @singleton then
+                  #   f.print "    &#{@global_name}_SINGLE_CELL_CB,        /* CB 1 */\n"
+                  # else
+                  #   # f.print "    &#{@global_name}_#{c.get_name}_CB,\n"
+                  #   f.print "    &#{@global_name}_CB_tab[#{index}],      /* CB 2 */\n"
+                  # end
+                  f.print "    #{name_array[8]},      /* CB 1 */\n"
                 elsif has_INIB? then
-                  if @singleton then
-                    f.print "    &#{@global_name}_SINGLE_CELL_INIB,      /* INIB */\n"
-                  else
-                    f.print "    &#{@global_name}_INIB_tab[#{index}],    /* INIB */\n"
-                  end
+                  # if @singleton then
+                  #   f.print "    &#{@global_name}_SINGLE_CELL_INIB,      /* INIB 1 */\n"
+                  # else
+                  #   f.print "    &#{@global_name}_INIB_tab[#{index}],    /* INIB 2 */\n"
+                  # end
+                  f.print "    &#{name_array[5]},      /* INIB 1 */\n"
                 else
                   f.print "    0,\n"
@@ -4178,16 +4392,18 @@
             else
               if has_CB? then
-                if @singleton then
-                  f.print "    &#{@global_name}_SINGLE_CELL_CB,       /* CB */\n"
-                else
-                  f.print "    &#{@global_name}_CB_tab[#{index}],     /* CB */\n"
-                  # f.print "    &#{@global_name}_#{c.get_name}_CB,\n"
-                end
+                # if @singleton then
+                #   f.print "    &#{@global_name}_SINGLE_CELL_CB,       /* CB 3 */\n"
+                # else
+                #   f.print "    &#{@global_name}_CB_tab[#{index}],     /* CB 4 */\n"
+                #   # f.print "    &#{@global_name}_#{c.get_name}_CB,\n"
+                # end
+                f.print "    #{name_array[8]},      /* CB 3 */\n"
               elsif has_INIB? then
-                if @singleton then
-                  f.print "    &#{@global_name}_SINGLE_CELL_INIB,     /* INIB */\n"
-                else
-                  f.print "    &#{@global_name}_INIB_tab[#{index}],   /* INIB */\n"
-                end
+                # if @singleton then
+                #   f.print "    &#{@global_name}_SINGLE_CELL_INIB,     /* INIB 3 */\n"
+                # else
+                #   # f.print "    &#{@global_name}_INIB_tab[#{index}],   /* INIB 4 */\n"
+                # end
+                f.print "    &#{name_array[5]},      /* INIB 3 */\n"
               else
                 f.print "    0,\n"
@@ -4550,4 +4766,5 @@
   def generate_inline_template_code
     return if @n_entry_port_inline == 0
+    return if @b_reuse && ! $generate_all_template
     if ! ( @plugin && @plugin.gen_ep_func? ) then
       return if @b_reuse && ! $generate_all_template
@@ -4927,13 +5144,13 @@
   #  str に以下の置換を行う
   #-   $ct$ ⇒ セルタイプ名(ct)
-  #-   $cell$ ⇒ セル名(cell)   cell が nil ならば3つの置換は行われない
+  #-   $cell$ ⇒ セル名(cell)   cell が nil ならば以下の置換は行われない
   #-   $cb$ ⇒ CB の C 言語名(cb)
   #-   $cbp$ ⇒ CB へのポインタ(cbp)
   #-   $cb_proto$ ⇒ CB の C 言語名プロトタイプ宣言用(cb_proto)
-  #-   $id$ ⇒ ct_cell
+  #-   $id$ ⇒ $ct$_$cell_global$    # ct_cell  before or same V1.5.2
   #-   $idx$ ⇒ idx
   #-   $ID$ ⇒ id (整数の番号)
   #-   $ct_global$ ⇒ セルタイプ名(ct)
-  #-   $cell_global$ ⇒ セル名(cell)   cell が nil ならば3つの置換は行われない
+  #-   $cell_global$ ⇒ セル名(cell)
   #-   $$   ⇒ $
   def subst_name( str, name_array )
@@ -4950,13 +5167,14 @@
 
     str = str.gsub( /(^|[^\$])\$ct\$/, "\\1#{ct}" )
+    str = str.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{ct_global}" )
     if cell then
       str = str.gsub( /(^|[^\$])\$cell\$/, "\\1#{cell}" )
       str = str.gsub( /(^|[^\$])\$cb\$/, "\\1#{cb}" )
-      str = str.gsub( /(^|[^\$])\$id\$/, "\\1#{ct}_#{cell}" )
+      # str = str.gsub( /(^|[^\$])\$id\$/, "\\1#{ct}_#{cell}" )
+      str = str.gsub( /(^|[^\$])\$id\$/, "\\1#{ct}_#{cell_global}" )
       str = str.gsub( /(^|[^\$])\$cb_proto\$/, "\\1#{cb_proto}" )
       str = str.gsub( /(^|[^\$])\$ID\$/, "\\1#{id}" )
       str = str.gsub( /(^|[^\$])\$idx\$/, "\\1#{idx}" )
       str = str.gsub( /(^|[^\$])\$cbp\$/, "\\1#{cbp}" )
-      str = str.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{ct_global}" )
       str = str.gsub( /(^|[^\$])\$cell_global\$/, "\\1#{cell_global}" )
     end
@@ -5078,2 +5296,9 @@
   end
 end
+
+class DomainType < Node
+  def gen_factory
+    # p "DomainType: gen_factory"
+    @plugin.gen_factory
+  end
+end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/location.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/location.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/location.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/messages.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/messages.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/messages.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/optimize.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/optimize.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/optimize.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2018 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -178,4 +178,5 @@
 
   def set_domain
+    domain_cells = {}
     @cell_list.each{ |c|
       if c.is_generate? then
@@ -191,4 +192,9 @@
           @domain_roots[ dn ] = [ dr ]
         end
+        if domain_cells[ dr ]  then
+          domain_cells[ dr ] << c
+        else
+          domain_cells[ dr ] = [ c ]
+        end
       end
     }
@@ -196,10 +202,21 @@
     @domain_roots.each{ |dn, drs|
       drs.uniq!
-      if ! $debug then
-        dbgPrint "domains celltype:#{@name} domain=#{dn} "
+      if $verbose && dn then
+        print "[domain] celltype=#{@name} domainType=#{dn} domainRootRegions={"
+        delim = ""
         drs.each{ |r|
-          dbgPrint " region=#{r.get_name}"
+          print delim, r.get_name
+          delim = ", "
         }
-        dbgPrint "\n"
+        print "}\n"
+        drs.each{ |r|
+          print "[domain] celltype=#{@name} domainRootRegion=#{r.get_name} domainType=#{dn} domainKind=#{r.get_domain_root.get_domain_type.get_kind} domainCells={"
+          delim = ""
+          domain_cells[r].each{ |c|
+            print delim, c.get_name
+            delim = ", "
+          }
+          print "}\n"
+        }
       end
     }
@@ -212,9 +229,12 @@
       # domain_type は一つのノードに一つしかないので、一つの要素を無条件で取り出す
       if regions.length > 1 then
-        cdl_info( "I9999 celltype:#{@name} has cells in multi domain.\n" )
-        if @idx_is_id == false then
-          cdl_info( "I9999 celltype:#{@name} forcely set idx_is_id\n" )
-        end
-        @idx_is_id_act = true
+        if $verbose then
+          cdl_info( "I9999 celltype '$1' has cells in multi-domain.\n", @name )
+        end
+        # if @idx_is_id == false then
+        #   cdl_info( "I9999 celltype '$1' forcely set idx_is_id\n", @name )
+        # end
+        @b_need_ptab = true
+        # @idx_is_id_act = true
       end
     }
@@ -228,4 +248,12 @@
     end
 
+    optimize_call
+    if $unopt_entry == false then
+      optimize_entry
+    end
+  end
+
+  #=== Celltype#呼び口最適化
+  def optimize_call
     @port.each{ |port|
       next if port.get_port_type != :CALL
@@ -361,5 +389,9 @@
       dbgPrint "#{port.get_name} : # of cells : #{port_cells.length}  # of ports : #{port_ports.length}\n"
     }
-
+  end
+
+  #=== Celltype#受け口最適化
+  # optimize_entry は、呼び口最適化の結果を使用している
+  def optimize_entry
     # 受け口最適化の設定
     @port.each{ |port|
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -160,5 +160,5 @@
       #  識別子取得
       if arg =~ /\A[a-zA-Z_]\w*/ then
-        ident = $~
+        ident = $~.to_s    # 
         arg = $'
       else
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/pluginModule.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/pluginModule.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/pluginModule.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/syntaxobj.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/syntaxobj.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/syntaxobj.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2016 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -685,4 +685,11 @@
   end
 
+  #=== Decl# print_flowinfo
+  def print_flowinfo file
+    if @kind == :VAR then
+      file.write "#{@identifier} "
+    end
+  end
+
   def show_tree( indent )
     indent.times { print "  " }
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -250,4 +250,8 @@
     Cell.create_reverse_join
 
+    DescriptorType.check_signature
+    Signature.set_descriptor_list
+    Celltype.check_dynamic_join
+
     #0 set_definition_join は2回呼び出される（1回目）
     dbgPrint( "## Checking all join\n")
@@ -450,4 +454,68 @@
   end # finalize
 
+  def dump_tecsgen_rbdmp
+    dbgPrint "dump_tecsgen_rbdmp 0:\n"
+    #### unjoin_plugin 後に行う必要があるため、コード生成後にダンプを行う
+    #### Region link root ごとにオプティマイズしてダンプ ####
+    Namespace.get_root.unjoin_plugin
+    Namespace.get_root.find_plugin 0, []
+
+    Region.get_link_roots.each { |region|
+      dbgPrint "dump_tecsgen_rbdmp 1: Region.path_str: #{region.get_namespace_path.get_path_str}\n"
+
+      n_cells = region.get_n_cells
+
+      if $region_list.length > 0 then
+        if $region_list[ region.get_namespace_path.get_path_str ] == false then
+          $region_list[ region.get_namespace_path.get_path_str ] = true
+        else
+          next
+        end
+      end
+
+      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
+        #   Generator.warning( "W9999 $1: specified to generate but has no cell", region.get_name )
+        # end
+        if region != @root_namespace then
+          next
+        end
+      end
+
+      dbgPrint "dump_tecsgen_rbdmp 3: Region.path_str: #{region.get_namespace_path.get_path_str}\n"
+      $generating_region = region
+      if Region.get_link_roots.length > 1 then
+        if region.get_name == "::" then
+          $gen = $gen_base
+        else
+          $gen = $gen_base + "/" + region.get_global_name.to_s
+        end
+      else
+        $gen = $gen_base
+      end
+
+      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   # 最適化をリセットする
+
+      #  if Generator.get_n_error == 0 then
+      #   # エラーが発生していたら、ここへは来ない
+         dbgPrint( "## Set cell id\n")
+        @root_namespace.set_cell_id_and_domain      # セルの ID とドメイン情報を設定（linkunit 毎に0からつける）
+
+        # エラーが発生していたら、最適化は実施しない
+        if ! $unopt then
+          dbgPrint( "## Optimizing: Link Region=#{@root_namespace.get_name}\n")
+          @root_namespace.optimize
+        end
+      # end
+      dbgPrint "dump_tecsgen_rbdmp final: Region.path_str: #{region.get_namespace_path.get_path_str}\n"
+      File.write( "#{$gen}/tecsgen.rbdmp", Marshal.dump(Namespace.get_root) )
+    }
+  end
+  
   def self.post_coded?
     @@b_post_coded
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/tecsinfo.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/tecsinfo.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/tecsinfo.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2017 by TOPPERS Project
+#   Copyright (C) 2017-2018 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -49,5 +49,7 @@
 #{indent0}region rTECSInfo {
 EOT
-    # mikan 全部生成するのではなく、region 下のセルのセルタイプと、そこから参照されるシグニチャ、セルタイプに限定して出力する．
+    Type.reset_print_info
+
+    # mikan 全部生成するのではなく、region 下のセルのセルタイプと、そこから参照されるシグニチャ、セルタイプに限定して出力すべき
     # しかし、意味解析後に出力するため、これは容易ではない．最適化とコード生成は、リンクルートごとに行われる．
     Namespace.print_info f, indent
@@ -149,4 +151,7 @@
                  "#{tag.get_ID_str}_#{decl.get_name}",
                  "(uint32_t)(intptr_t)&(((#{tag.get_type_str}#{tag.get_type_str_post}*)0)->#{decl.get_name})"
+        f.printf "#define PLACE_OF_%-30s  (%s)\n",
+                 "#{tag.get_ID_str}_#{decl.get_name}",
+                 "VARDECL_PLACE_STRUCT"
       }
     }
@@ -191,4 +196,17 @@
     }
   end
+
+  def print_entry_define f
+    @celltype_list.each { |ct|
+      if ct.get_cell_list.length > 0 then
+        ct.print_entry_define f
+      end
+    }
+    @namespace_list.each { |ns|
+      if ns.instance_of? Namespace then   # region を含めない
+        ns.print_entry_define f
+      end
+    }
+  end
 end
 
@@ -200,10 +218,28 @@
       name = @global_name
     end
+    # p "region:#{get_name}"
     f.print "\n#{indent}/*** #{get_namespace_path} region information cell ***/\n"
     f.print <<EOT
 #{indent}cell nTECSInfo::tRegionInfo #{name}RegionInfo{
 #{indent}    name = "#{@name}";
-#{indent}};
-EOT
+EOT
+    @cell_list.each{ |cell|
+        # print "cell class="+cell.get_celltype.class.name+", " + cell.get_celltype.get_name.to_s + " 1\n"
+      if ! cell.exclude_info? then
+        # print "cell class="+cell.get_celltype.class.name+", " + cell.get_celltype.get_name.to_s + " 2\n"
+        f.print "#{indent}    cCellInfo[] = #{cell.get_global_name}CellInfo.eCellInfo;\n"
+      end
+    }
+    @namespace_list.each { |region|
+      if region.instance_of? Region then
+        f.print "#{indent}    cRegionInfo[] = #{region.get_global_name}RegionInfo.eRegionInfo;\n"
+       end
+    }
+    f.print "#{indent}};\n"
+    @cell_list.each{ |cell|
+      if ! cell.exclude_info? then
+        cell.print_info f, indent
+      end
+    }
   end
 
@@ -221,4 +257,83 @@
     self.print_info_region f, indent
   end
+
+  def self.print_cell_define f
+    region.get_link_root.print_cell_define f
+    region.get_link_root.get_region{ |region|
+      if region.instance_of? Region then
+        region.print_cell_define_offset f
+      end
+
+    }
+  end
+
+  def print_cell_define f
+    ct_list = {}
+    @cell_list.each{ |cell|
+      next if cell.exclude_info_factory?
+      ct_list[ cell.get_celltype ] = true
+    }
+    f.print "#define TOPPERS_CB_TYPE_ONLY\n"
+    ct_list.each{ |ct, val|
+      f.print "#include \"#{ct.get_global_name}_tecsgen.h\"\n"
+    }
+    f.print "\n"
+    @cell_list.each{ |cell|
+      next if cell.exclude_info_factory?
+      name_array = cell.get_celltype.get_name_array cell
+      if cell.get_celltype.has_CB?
+        cb = "(void*)#{name_array[8]}"
+        cb_proto = "extern #{cell.get_celltype.get_global_name}_CB #{name_array[4]};\n"
+      else
+        cb = "0"
+        cb_proto = ""
+      end
+      if cell.get_celltype.has_INIB?
+        inib = "(void*)&#{name_array[5]}"
+        inib_proto = "extern #{cell.get_celltype.get_global_name}_INIB #{name_array[11]};\n"
+      else
+        inib = "0"
+        inib_proto = ""
+      end
+      if ! cell.exclude_info_factory? then
+        f.print <<EOT
+#{cb_proto}#define  #{cell.get_global_name}__CBP   #{cb}
+#{inib_proto}#define  #{cell.get_global_name}__INIBP #{inib}
+EOT
+      end
+    }
+    @namespace_list.each { |region|
+      if region.instance_of? Region then
+        region.print_cell_define f
+      end
+    }
+  end
+
+  def print_entry_descriptor_define f
+    @cell_list.each{ |cell|
+      next if cell.exclude_info_factory?
+
+      signatures = {}
+      cell.get_celltype.get_port_list.each{ |port|
+        next if port.get_port_type != :ENTRY
+
+        if signatures[ port.get_signature ] == nil then
+          f.print "#include \"#{port.get_signature.get_global_name}_tecsgen.h\"\n"
+        end
+        if cell.get_celltype.get_global_name == :nTECSInfo_tRawEntryDescriptorInfo then
+          f.print "const struct tag_#{cell.get_celltype.get_global_name}_#{port.get_name}_DES "
+          f.print "#{cell.get_global_name}_#{port.get_name}_des;\n"
+        else
+          f.print "extern struct tag_#{port.get_signature.get_global_name}_VDES "
+          f.print "#{cell.get_global_name}_#{port.get_name}_des;\n"
+        end
+      }
+    }
+    @namespace_list.each { |region|
+      if region.instance_of? Region then
+        region.print_entry_descriptor_define f
+      end
+    }
+  end
 end
 
@@ -227,11 +342,11 @@
     f.print <<EOT
 #{indent}cell nTECSInfo::tCelltypeInfo #{@global_name}CelltypeInfo {
-#{indent}    name            = "#{@name}";
-#{indent}    b_singleton     = #{@singleton};
-#{indent}    b_IDX_is_ID_act = C_EXP( "#{@global_name}__IDX_is_ID_act" );
-#{indent}    b_hasCB         = C_EXP( "#{@global_name}__hasCB" );
-#{indent}    b_hasINIB       = C_EXP( "#{@global_name}__hasINIB" );
-#{indent}    n_cellInLinUnit = C_EXP( "#{@global_name}__NCELLINLINKUNIT" );
-#{indent}    n_cellInSystem  = #{@cell_list.length};
+#{indent}    name             = "#{@name}";
+#{indent}    b_singleton      = #{@singleton};
+#{indent}    b_IDX_is_ID_act  = C_EXP( "#{@global_name}__IDX_is_ID_act" );
+#{indent}    sizeOfCB         = C_EXP( "#{@global_name}__sizeOfCB" );
+#{indent}    sizeOfINIB       = C_EXP( "#{@global_name}__sizeOfINIB" );
+#{indent}    n_cellInLinkUnit = C_EXP( "#{@global_name}__NCELLINLINKUNIT" );
+#{indent}    n_cellInSystem   = #{@cell_list.length};
 EOT
     @port.each{ |port|
@@ -273,8 +388,8 @@
     }
     @attribute.each{ |decl|
-      decl.print_info f, @global_name, indent
+      decl.print_info f, @global_name, indent, :DECLTYPE_ATTR
     }
     @var.each{ |decl|
-      decl.print_info f, @global_name, indent
+      decl.print_info f, @global_name, indent, :DECLTYPE_VAR
     }
   end
@@ -295,16 +410,21 @@
         if ! decl.is_omit? then
           offset = "(uint32_t)(intptr_t)&(((#{@global_name}_#{inib_cb}*)0)->#{decl.get_name})"
+          place = inib_cb
         else
           offset = "0xffffffff"
+          place = "NON"
         end
         f.printf "#define OFFSET_OF_%-30s  (%s)\n", "#{@global_name}_#{decl.get_name}", offset
+        f.printf "#define PLACE_OF_%-30s  VARDECL_PLACE_%s\n", "#{@global_name}_#{decl.get_name}", place
       }
       @var.each{ |decl|
-        if decl.get_size_is then
+        if decl.get_size_is && has_INIB? then
           inib_cb = "INIB"
         else
           inib_cb = "CB"
         end
-          f.printf "#define OFFSET_OF_%-30s  (%s)\n", "#{@global_name}_#{decl.get_name}", "(uint32_t)(intptr_t)&(((#{@global_name}_#{inib_cb}*)0)->#{decl.get_name})"
+        place = inib_cb
+        f.printf "#define OFFSET_OF_%-30s  (%s)\n", "#{@global_name}_#{decl.get_name}", "(uint32_t)(intptr_t)&(((#{@global_name}_#{inib_cb}*)0)->#{decl.get_name})"
+        f.printf "#define PLACE_OF_%-30s  VARDECL_PLACE_%s\n", "#{@global_name}_#{decl.get_name}", place
       }
     else
@@ -316,7 +436,9 @@
       @attribute.each{ |decl|
         f.printf "#define OFFSET_OF_%-30s  (%s)\n", "#{@global_name}_#{decl.get_name}", "0xffffffff"
+        f.printf "#define PLACE_OF_%-30s   VARDECL_PLACE_NON\n", "#{@global_name}_#{decl.get_name}"
       }
       @var.each{ |decl|
         f.printf "#define OFFSET_OF_%-30s  (%s)\n", "#{@global_name}_#{decl.get_name}", "0xffffffff"
+        f.printf "#define PLACE_OF_%-30s   VARDECL_PLACE_NON\n", "#{@global_name}_#{decl.get_name}"
       }
     end
@@ -324,8 +446,27 @@
 
   def print_celltype_define f
-    f.printf "#define %-50s (#{@idx_is_id_act})\n",     "#{@global_name}__IDX_is_ID_act"
-    f.printf "#define %-50s (#{has_CB?})\n",            "#{@global_name}__hasCB"
-    f.printf "#define %-50s (#{has_INIB?})\n",          "#{@global_name}__hasINIB"
-    f.printf "#define %-30s (%d)\n", "#{@global_name}__NCELLINLINKUNIT", @n_cell_gen
+    if has_INIB? then
+      size_INIB = "(sizeof(#{@global_name}_INIB))"
+    else
+      size_INIB = "(0)"
+    end
+    if has_CB? then
+      size_CB = "(sizeof(#{@global_name}_CB))"
+    else
+      size_CB   = "(0)"
+    end
+
+    if @n_cell_gen > 0 then
+      f.printf "\n#include \"#{@global_name}_tecsgen.h\"\n"
+      f.printf "#define %-50s (#{@idx_is_id_act})\n",     "#{@global_name}__IDX_is_ID_act"
+      f.printf "#define %-50s (#{size_CB})\n",            "#{@global_name}__sizeOfCB"
+      f.printf "#define %-50s (#{size_INIB})\n",          "#{@global_name}__sizeOfINIB"
+      f.printf "#define %-30s (%d)\n", "#{@global_name}__NCELLINLINKUNIT", @n_cell_gen
+    else
+      f.printf "#define %-50s (false)\n",                 "#{@global_name}__IDX_is_ID_act"
+      f.printf "#define %-50s (0)\n",                     "#{@global_name}__sizeOfCB"
+      f.printf "#define %-50s (0)\n",                     "#{@global_name}__sizeOfINIB"
+      f.printf "#define %-30s (%d)\n", "#{@global_name}__NCELLINLINKUNIT", @n_cell_gen
+    end
   end
 
@@ -365,5 +506,5 @@
         end
       end
-      if ( port.is_VMT_useless? && port.is_cell_unique? ) || @n_cell_gen == 0 then
+      if ( port.is_VMT_useless? && port.is_cell_unique? ) || port.is_omit? || @n_cell_gen == 0 then
         offset = "0xffffffff"
       else
@@ -375,5 +516,13 @@
         offset = "(uint32_t)(intptr_t)&((#{@global_name}_#{cb_inib}*)0)->#{port.get_name}"
       end
+      array_size = port.get_array_size
+      if array_size == "[]" then
+        array_size = "0xffffffff"
+      elsif array_size == nil then
+        array_size = "0"
+      end
+
       f.printf "#define %-50s (#{offset})\n",                   "#{@global_name}_#{port.get_name}__offset"
+      f.printf "#define %-50s (#{array_size})\n",               "#{@global_name}_#{port.get_name}__array_size"
       f.printf "#define %-50s (#{place})\n",                    "#{@global_name}_#{port.get_name}__place"
       f.printf "#define %-50s (#{port.is_VMT_useless?})\n",     "#{@global_name}_#{port.get_name}__b_VMT_useless"
@@ -382,4 +531,18 @@
     }
   end
+
+  def print_entry_define f
+    @port.each{ |port|
+      next if port.get_port_type == :CALL
+      array_size = port.get_array_size
+      if array_size == "[]" then
+        array_size = "0xffffffff"
+      elsif array_size == nil then
+        array_size = "0"
+      end
+
+      f.printf "#define %-50s (#{array_size})\n",               "#{@global_name}_#{port.get_name}__array_size"
+    }
+  end
 end
 
@@ -393,4 +556,5 @@
 #{indent}    cSignatureInfo  = #{@signature.get_global_name}SignatureInfo.eSignatureInfo;
 #{indent}    b_inline        = #{@b_inline};
+#{indent}    array_size      = C_EXP( "#{ct_global}_#{@name}__array_size" );
 #{indent}};
 EOT
@@ -401,4 +565,5 @@
 #{indent}    cSignatureInfo  = #{@signature.get_global_name}SignatureInfo.eSignatureInfo;
 #{indent}    offset            = C_EXP( "#{ct_global}_#{@name}__offset" );
+#{indent}    array_size        = C_EXP( "#{ct_global}_#{@name}__array_size" );
 #{indent}    b_optional        = #{@b_optional};
 #{indent}    b_omit            = #{@b_omit};
@@ -418,4 +583,83 @@
 end
 
+class Cell
+  def print_info f, indent
+    if exclude_info? then
+      return
+    end
+    f.print <<EOT
+
+#{indent}/*** #{@global_name} cell information ****/
+#{indent}cell nTECSInfo::tCellInfo #{@global_name}CellInfo {
+#{indent}    name            = "#{@name}";
+#{indent}    cbp             = C_EXP( \"#{@global_name}__CBP\" );
+#{indent}    inibp           = C_EXP( \"#{@global_name}__INIBP\" );
+#{indent}    cCelltypeInfo   = #{@celltype.get_global_name}CelltypeInfo.eCelltypeInfo;
+EOT
+    @celltype.get_port_list.each{ |port|
+      next if port.get_port_type != :ENTRY
+
+      f.print <<EOT
+#{indent}    cRawEntryDescriptor[] = #{@global_name}_#{port.get_name}RawEntryDescriptorInfo.eRawEntryDescriptor;
+EOT
+    }
+    f.print "#{indent}};\n"
+
+    # RawEntryDescriptorInfo cells
+    @celltype.get_port_list.each{ |port|
+      next if port.get_port_type != :ENTRY
+
+      size = port.get_array_size
+      if size == nil then
+        size = 1
+      elsif size == "[]" then
+        size = @entry_array_max_subscript[ port ]
+      end
+      if ! port.is_omit? then
+        red = "C_EXP( \"&#{@global_name}_#{port.get_name}_des\" )"
+      else
+        red = "(void *)0"
+      end
+      # mikan 受け口配列
+      f.print <<EOT
+#{indent}cell nTECSInfo::tRawEntryDescriptorInfo #{@global_name}_#{port.get_name}RawEntryDescriptorInfo {
+#{indent}   size = #{size};
+#{indent}   rawEntryDescriptor = { #{red} };
+EOT
+#  #{indent}   cEntryInfo = #{@celltype.get_global_name}_#{port.get_name}EntryInfo.eEntryInfo;
+      f.print "#{indent}};\n"
+    }
+  end
+
+  def exclude_info?
+    # print "exclude_info?: name=" + get_name.to_s
+    if @celltype == nil ||
+       is_of_composite? ||
+       @celltype.get_global_name == :nTECSInfo_tTECSInfoSub ||
+       post_code_generated? ||
+       @b_defined == false then
+      # print ": true celltype_is_of_composite=#{is_of_composite?} celltype_name=#{@celltype.get_global_name} celltype.need_generate=#{@celltype.need_generate?}\n"
+      return true
+    else
+      # print ": false\n"
+      return false
+    end
+  end
+
+  def exclude_info_factory?
+    # print "exclude_info_factory?: name=" + get_name.to_s
+    if @celltype == nil ||
+       is_of_composite? ||
+       @celltype.get_global_name == :nTECSInfo_tTECSInfoSub ||
+       ! @celltype.need_generate? then
+      # print ": true celltype_is_of_composite=#{is_of_composite?} celltype_name=#{@celltype.get_global_name} celltype.need_generate=#{@celltype.need_generate?}\n"
+      return true
+    else
+      # print ": false\n"
+      return false
+    end
+  end
+end
+
 class Signature
   def print_info f, indent
@@ -446,5 +690,5 @@
     f.print <<EOT
 #{indent}cell nTECSInfo::tFunctionInfo #{sig_name}_#{func_name}FunctionInfo {
-#{indent}    name            = "#{@owner.get_global_name}_#{@name}";
+#{indent}    name            = "#{get_name}";
 #{indent}    bOneway         = #{is_oneway?};
 EOT
@@ -502,5 +746,5 @@
 
 class Decl
-  def print_info f, parent_ID_str, indent
+  def print_info f, parent_ID_str, indent, decl_type
     if @size_is then
       size = "\"mikan\"";
@@ -512,6 +756,7 @@
 #{indent}    name            = "#{get_name}";
 #{indent}    sizeIsExpr      = #{size};
-#{indent}    declType        = DECLTYPE_STMEMBER;
+#{indent}    declType        = #{decl_type};
 #{indent}    offset          = C_EXP( "OFFSET_OF_#{parent_ID_str}_#{get_name}" );
+#{indent}    place           = C_EXP( "PLACE_OF_#{parent_ID_str}_#{get_name}" );
 #{indent}    cTypeInfo       = #{get_type.get_ID_str}TypeInfo.eTypeInfo;
 #{indent}};
@@ -523,4 +768,9 @@
 class Type
   @@typeinfo_printed = {}
+
+  def self.reset_print_info
+    @@typeinfo_printed = {}
+  end
+
   def print_info f, indent
     # Type の info は、最後にまとめて出力するので、ここでは記録するだけ
@@ -538,5 +788,5 @@
     elsif self.kind_of? StructType then
       get_members_decl.get_items.each{ |decl|
-        decl.get_type.print_info f, indent
+        decl.print_info f, get_ID_str, indent, :DECLTYPE_STMEMBER
       }
     end
@@ -550,8 +800,4 @@
 
   def print_info_post f, indent
-    bit_size = get_bit_size
-    if bit_size == 0 then
-      bit_size = "C_EXP( \"sizeof(#{get_type_str}#{get_type_str_post})\" )"
-    end
     if self.class.superclass == Type then     # 親クラスが Type の場合 types.rb のクラス
       type_name = self.class.name
@@ -566,17 +812,17 @@
 #{indent}    name           = "#{get_type_str}#{get_type_str_post}";
 #{indent}    typeKind       = TECSTypeKind_#{type_name};
-#{indent}    bitSize        = #{bit_size};
+#{indent}    size           = C_EXP( "sizeof(#{get_type_str}#{get_type_str_post})" );
 #{indent}    b_const        = #{is_const?};
 #{indent}    b_volatile     = #{is_volatile?};
 EOT
     if self.kind_of? PtrType then
-      f.print "#{indent}    cTypeInfo      = #{get_referto.get_ID_str}TypeInfo.eTypeInfo;\n"
+      f.print "#{indent}    cTypeInfo        = #{get_referto.get_ID_str}TypeInfo.eTypeInfo;\n"
     elsif self.kind_of? ArrayType then
-      f.print "#{indent}    cTypeInfo      = #{get_type.get_ID_str}TypeInfo.eTypeInfo;\n"
+      f.print "#{indent}    cTypeInfo        = #{get_type.get_ID_str}TypeInfo.eTypeInfo;\n"
     elsif self.kind_of? DefinedType then
-      f.print "#{indent}    cTypeInfo      = #{get_type.get_ID_str}TypeInfo.eTypeInfo;\n"
+      f.print "#{indent}    cTypeInfo        = #{get_type.get_ID_str}TypeInfo.eTypeInfo;\n"
     elsif self.kind_of? StructType then
       get_members_decl.get_items.each{ |decl|
-        f.print "#{indent}    cTypeInfo[]    = #{decl.get_type.get_ID_str}TypeInfo.eTypeInfo;\n"
+        f.print "#{indent}    cVarDeclInfo[] = #{get_ID_str}_#{decl.get_name}VarDeclInfo.eVarDeclInfo;\n"
       }
     elsif self.kind_of? DescriptorType then
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/tool_info.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/tool_info.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/tool_info.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/types.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/types.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/types.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #
-#   Copyright (C) 2008-2015 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--  
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -629,5 +629,5 @@
 
 class FloatType < Type
-#  @bit_size::         32, 64, (80), -32, -64
+#  @bit_size::         32, 64, (80), -32, -64, -128
 
   def initialize( bit_size )
@@ -684,4 +684,6 @@
     when -64
       str = "#{str}double"
+    when -128
+      str = "#{str}long double"
     end
     return str
@@ -1558,18 +1560,12 @@
 # 動的結合で渡すデスクリプタ型
 class DescriptorType < Type
-# @sinagure_nsp::NamespacePath
+  # @sinagure_nsp::NamespacePath
+
+  @@descriptors = {}
 
   def initialize( signature_nsp )
-    # p "Desc #{signature_nsp.to_s}"
-    obj = Namespace.find signature_nsp
-    if ! obj.kind_of? Signature then
-      cdl_error( "T9999 '$1': not signature or not found", signature_nsp.to_s )
-      @signature_nsp = signature_nsp
-    else
-      if obj.has_descriptor? then
-       # cdl_error( "T9999 '$1': has Descriptor in function parameter", signature_nsp.to_s )
-      end
-      @signature_nsp = obj.get_namespace_path
-    end
+    @signature_nsp = signature_nsp
+    # check_signature ##
+    @@descriptors[ self ] = false
   end
 
@@ -1595,4 +1591,26 @@
     else
       cdl_error2( locale, "T9999 Descriptor cannot be used for $1", kind)
+    end
+  end
+
+  def self.check_signature
+    @@descriptors.each{ |desc, val|
+      if val != true then
+        desc.check_signature
+        @@descriptors[ desc ] = true
+      end
+    }
+  end
+  
+  def check_signature
+    # p "Desc #{@signature_nsp.to_s}"
+    obj = Namespace.find @signature_nsp
+    if ! obj.kind_of? Signature then
+      cdl_error( "T9999 '$1': not signature or not found", @signature_nsp.to_s )
+    else
+      if obj.has_descriptor? then
+       # cdl_error( "T9999 '$1': has Descriptor in function parameter", @signature_nsp.to_s )
+      end
+      # @signature_nsp = obj.get_namespace_path
     end
   end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/unjoin_plugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/unjoin_plugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/core/unjoin_plugin.rb	(revision 374)
@@ -0,0 +1,218 @@
+# -*- coding: utf-8 -*-
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2019 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#   $Id$
+#++
+
+# Marshal.dump で不都合な事項への対策
+# Proc は _dump_data が定義されていないため、定義する．
+# plugin 関係は、tecsflow に Plugin クラスが存在しないため、消しておく．
+
+# Proc は、Marshal.dump することができないため _dump_data を定義
+class Proc
+  def _dump_data
+    nil
+  end
+end
+
+class Object
+  @@visited = {}
+  @@n_visited = 0
+  @@n_found = 0
+  @@n_plugin_proxy = 0
+
+  # do nothing now. this function is used to find remained Proxy object.
+    def find_plugin level, object_list
+
+    # find_plugin_1 level, object_list
+    # print "find_plugin: n_visted=", @@n_visited, " (len=", @@visited.length, ")  found=", @@n_found, "  proxy=", @@n_plugin_proxy, "\n"
+  end
+
+  def find_plugin_1 level, object_list
+    if @@visited[ self ] then
+      return
+    end
+    @@visited[ self ] = true
+    @@n_visited += 1
+
+    if kind_of? Expression then
+      # print   # Expression では print が別に定義されている
+      get_elements.each{|ele|
+        ele.find_plugin_1 level+1, object_list
+      }
+      return
+    end
+
+    if level > 100 then    # 100 is enough now, 50 is too small
+      print "reached max level: "
+      if respond_to? :get_name then
+        print "#{get_name}(#{self.class.name})\n"
+      else
+        print "(#{self.class.name})\n"
+      end
+      return
+    end
+
+    object_list.push self                 ##### ここから return 不可
+
+    if (kind_of? Plugin) || (kind_of? HRPSVCPlugin) then
+      @@n_found += 1
+      print "Plugin found: #{self.class.name}\n"
+      object_list.each{ |obj|
+        if obj.respond_to? :get_name then
+          print "#{obj.get_name}(#{obj.class.name}), "
+        else
+          print "(#{obj.class.name}), "
+        end
+      }
+      print "\n"
+    elsif kind_of? Join::ThroughPluginProxy then
+      @@n_plugin_proxy += 1
+    end
+
+    level += 1
+    if kind_of? Array then
+      each{ |val|
+        val.find_plugin_1 level, object_list
+      }
+    elsif kind_of? Hash then
+      each{ |key, val|
+        key.find_plugin_1 level, object_list
+        val.find_plugin_1 level, object_list
+      }
+    else
+      instance_variables.each{|iv|
+        iv_val = instance_variable_get iv
+        iv_val.find_plugin_1 level, object_list
+      }
+    end
+    object_list.pop                       ##### ここまで return 不可
+  end
+end
+
+class Namespace
+  def unjoin_plugin
+    @signature_list.each{ |sig| sig.unjoin_plugin }
+    @celltype_list.each{ |ct| ct.unjoin_plugin }
+    @cell_list.each{ |cell| cell.unjoin_plugin }
+    @namespace_list.each{ |ns| ns.unjoin_plugin}
+  end
+end
+
+class Region < Namespace
+  def unjoin_plugin
+    if @domain_type then
+      @domain_type.unjoin_plugin
+    end
+    @cell_port_throug_plugin_list.each{ |key, po|
+      proxy = Join::ThroughPluginProxy.new po.get_cell_namespace_path, po.get_through_entry_port_name, po.get_through_entry_port_subscript
+      @cell_port_throug_plugin_list[ key ] = proxy
+    }
+    super
+  end
+end
+
+class DomainType < Node
+  def unjoin_plugin
+    @plugin = nil
+  end
+end
+
+class Signature < NSBDNode
+  def unjoin_plugin
+    @generate = nil
+  end
+end
+
+class Celltype < NSBDNode
+  def unjoin_plugin
+    @generate = nil
+    @generate_list = []
+    @plugin = nil
+  end
+end
+
+class Cell < NSBDNode
+  def unjoin_plugin
+    @generate = nil
+    @plugin   = nil
+    @join_list.get_items.each{ |j| j.unjoin_plugin }
+  end
+end
+
+class Join < BDNode
+  class ThroughPluginProxy
+    def initialize namespace_path, entry_port_name, entry_port_subscript
+      @namespace_path = namespace_path
+      @entry_port_name = entry_port_name
+      @entry_port_subscript = entry_port_subscript
+    end 
+    def get_cell_namespace_path
+      @namespace_path
+    end
+    def get_through_entry_port_name
+      @entry_port_name
+    end
+    def get_through_entry_port_subscript
+      @entry_port_subscript
+    end
+  end 
+
+  def unjoin_plugin
+    # @thourhg_generated_list is refered in get_rhs_cell, get_rhs_port
+    @through_generated_list.map!{|po| # po: plugin object
+      ThroughPluginProxy.new po.get_cell_namespace_path, po.get_through_entry_port_name, po.get_through_entry_port_subscript
+    }
+    @region_through_generated_list.map!{|po| # po: plugin object
+      ThroughPluginProxy.new po.get_cell_namespace_path, po.get_through_entry_port_name, po.get_through_entry_port_subscript
+    }
+    if @array_member2 then
+      @array_member2.each{ |j| 
+        if j then
+          j.unjoin_plugin2
+        end
+      }
+    end
+  end
+  def unjoin_plugin2
+    @through_generated_list.map!{|po| # po: plugin object
+      ThroughPluginProxy.new po.get_cell_namespace_path, po.get_through_entry_port_name, po.get_through_entry_port_subscript
+    }
+    @region_through_generated_list.map!{|po| # po: plugin object
+      ThroughPluginProxy.new po.get_cell_namespace_path, po.get_through_entry_port_name, po.get_through_entry_port_subscript
+    }
+  end
+end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_en_US.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_en_US.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_en_US.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_ja_JP.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_ja_JP.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_ja_JP.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_en_US.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_en_US.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_en_US.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2018 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -76,5 +76,5 @@
 #  * このファイルを編集して使用することが意図されていますが
 #  * tecsgen の再実行により上書きされてしまうため、通常
-#  *   gen/%s_template.c => src/%s.c
+#  *   gen/%s_templ.c => src/%s.c
 #  * のように名前, フォルダを変更してから修正します
 #  */
@@ -83,5 +83,5 @@
  * This file was automatically generated by tecsgen.
  * Move and rename like below before editing,
- *   gen/%s_template.c => src/%s.c
+ *   gen/%s_templ.c => src/%s.c
  * to avoid to be overwritten by tecsgen.
  */
@@ -335,3 +335,8 @@
 @@comment[ :TEFB_comment ] = "\t/* Put statements here %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 ] = "/* cell CB prototype declaration %s */\n"
 end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_ja_JP.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_ja_JP.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_ja_JP.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2018 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -65,5 +65,5 @@
  * このファイルを編集して使用することが意図されていますが
  * tecsgen の再実行により上書きされてしまうため、通常
- *   gen/%s_template.c => src/%s.c
+ *   gen/%s_templ.c => src/%s.c
  * のように名前, フォルダを変更してから修正します
  */
@@ -163,4 +163,6 @@
 @@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: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1AlarmPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1AlarmPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1AlarmPlugin.rb	(revision 374)
@@ -35,5 +35,5 @@
 #   の責任を負わない．
 #  
-#   $Id
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1DelayTaskPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1DelayTaskPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1DelayTaskPlugin.rb	(revision 374)
@@ -35,5 +35,5 @@
 #   の責任を負わない．
 #  
-#   $Id
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ISRPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ISRPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ISRPlugin.rb	(revision 374)
@@ -35,5 +35,5 @@
 #   の責任を負わない．
 #  
-#   $Id
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1KernelPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1KernelPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1KernelPlugin.rb	(revision 374)
@@ -35,5 +35,5 @@
 #   の責任を負わない．
 #  
-#   $Id
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ResourcePlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ResourcePlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ResourcePlugin.rb	(revision 374)
@@ -35,5 +35,5 @@
 #   の責任を負わない．
 #  
-#   $Id
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1TaskPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1TaskPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1TaskPlugin.rb	(revision 374)
@@ -35,5 +35,5 @@
 #   の責任を負わない．
 #  
-#   $Id
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/DomainPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/DomainPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/DomainPlugin.rb	(revision 374)
@@ -46,4 +46,5 @@
   #option::String : domain 指定子の第二引数
   def initialize( region, domain_type_name, option )
+    super()
   end
 
@@ -77,3 +78,14 @@
     return false
   end
+
+  #== ドメイン種別を返す
+  #return::Symbol :kernel, :user, :OutOfDomain
+  def get_kind
+    :kernel
+  end
+
+  #== factory 生成
+  # DomainPlugin の factory は特定のファイルへの出力が想定されていない
+  def gen_factory
+  end
 end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2Cache.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2Cache.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2Cache.rb	(revision 374)
@@ -1,3 +1,4 @@
 # -*- coding: utf-8 -*-
 
+#   $Id$
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2CyclicHandlerPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2CyclicHandlerPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2CyclicHandlerPlugin.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2012 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2DataqueuePlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2DataqueuePlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2DataqueuePlugin.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2012 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -35,4 +35,5 @@
 #   の責任を負わない．
 #  
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2EventflagPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2EventflagPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2EventflagPlugin.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2012 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -35,4 +35,5 @@
 #   の責任を負わない．
 #  
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2FixedSizeMemoryPoolPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2FixedSizeMemoryPoolPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2FixedSizeMemoryPoolPlugin.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2012 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -35,4 +35,5 @@
 #   の責任を負わない．
 #  
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2HandlerPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2HandlerPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2HandlerPlugin.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2018 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -77,13 +77,13 @@
         elsif @plugin_arg_str == "ISR"
             file.print <<EOT
-#{tab}ATT_ISR({ #{val[:attribute]}, &#{cell_CB_name}, #{val[:interruptNumber]}, tISR_start, #{val[:priority]} });
+#{tab}ATT_ISR({ #{val[:attribute]}, #{cell_CBP}, #{val[:interruptNumber]}, tISR_start, #{val[:priority]} });
 EOT
         elsif @plugin_arg_str == "INIT_ROUTINE"
             file.print <<EOT
-#{tab}ATT_INI({ #{val[:attribute]}, &#{cell_CB_name}, tInitializeRoutine_start });
+#{tab}ATT_INI({ #{val[:attribute]}, #{cell_CBP}, tInitializeRoutine_start });
 EOT
         elsif @plugin_arg_str == "TERM_ROUTINE"
             file.print <<EOT
-#{tab}ATT_TER({ #{val[:attribute]}, &#{cell_CB_name}, tTerminateRoutine_start });
+#{tab}ATT_TER({ #{val[:attribute]}, #{cell_CBP}, tTerminateRoutine_start });
 EOT
         else
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2KernelObjectPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2KernelObjectPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2KernelObjectPlugin.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2012 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -186,5 +186,5 @@
                 val = {}
                 @celltype.get_attribute_list.each{ |a|
-                    p a.get_name
+                    # p a.get_name
                     if a.get_type.kind_of?( ArrayType )
                         val[a.get_name] = []
@@ -218,5 +218,6 @@
                 if val[:id].nil? != true
                     puts val[:id]
-                    val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_name.to_s}" )
+                    #val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_name.to_s}" )
+                    val[:id] = @celltype.subst_name( val[:id], @celltype.get_name_array( cell ) )
                 end
                 # $cbp$の代わり
@@ -244,6 +245,6 @@
                         file2.puts "}\n"
                     else
-                        print "~~~~~ #{cell.get_region.get_name.to_s} is included in"
-                        p @@region_list
+                        dbgPrint "~~~~~ #{cell.get_region.get_name.to_s} is included in"
+                        # p @@region_list
                     end
                     file3 = AppFile.open( "#{$gen}/tecsgen_#{cell_domain_root.get_name.to_s}.cfg" )
@@ -260,6 +261,6 @@
                 if !val[:accessPattern].nil?
                     puts "===== begin check regions #{cell.get_name} ====="
-                    p val[:accessPattern]
-                    p val[:accessPattern].class
+                    # p val[:accessPattern]
+                    # p val[:accessPattern].class
 
                     #ep = [ :eTaskActivate, :eTaskControl, :eTaskManage, :eTaskRefer ]
@@ -273,8 +274,8 @@
                         if acptnx != "OMIT"
                             acv << acptnx
-                            p acv[i]
+                            # p acv[i]
                         elsif cell_domain_type.get_option.to_s == "trusted"
                             acv << "TACP_KERNEL"
-                            p acv[i]
+                            # p acv[i]
                         elsif cell_domain_type.get_option.to_s != "OutOfDomain"
                             acv << "TACP(#{cell_domain_root.get_name.to_s})"
@@ -286,5 +287,5 @@
                     }
 
-                    print "acv = "
+                    dbgPrint "acv = "
                     p acv
 
@@ -322,9 +323,9 @@
 
     def self.check_referenced_cells()
-        puts "===== begin check registered celltype ====="
+        dbgPrint "===== begin check registered celltype =====\n"
         self.get_celltype_list.each { |ct|
-            p ct.get_name.to_s
+            dbgPrint( ct.get_name.to_s + "\n" )
         }
-        puts "===== end check registered celltype ====="
+        dbgPrint "===== end check registered celltype =====\n"
 
 =begin
@@ -334,5 +335,5 @@
                 j = cell.get_join_list.get_item(p.get_name)
                 printf "===== check call port : "
-                p p.get_name.to_s
+                # p p.get_name.to_s
                 next if j.nil? # 未結合の場合
                 if @@celltype_list.include?(j.get_celltype)
@@ -341,7 +342,7 @@
                     j.get_cell.set_referenced_cell(cell, j.get_port_name)
                     printf "===== check joined rhs cell : "
-                    p j.get_cell.get_name.to_s
+                    # p j.get_cell.get_name.to_s
                     printf "===== check joined rhs port_name : "
-                    p j.get_port_name
+                    # p j.get_port_name
                 end
             }
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2ObjectPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2ObjectPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2ObjectPlugin.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -35,4 +35,5 @@
 #   の責任を負わない．
 #  
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2Plugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2Plugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2Plugin.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2014 by TOPPERS Project
+#   Copyright (C) 2018 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -44,5 +44,17 @@
 
   def initialize( region, name, option )
+    super
     print "HRP2Plugin: initialize: region=#{region.get_name}, domainName=#{name}, option=#{option}\n"
+    @region = region
+    @name   = name
+
+    case option
+    when "trusted", "nontrusted", "OutOfDomain"
+      # OK
+      @option = option
+    else
+      cdl_error( "HRPPlugin: '$1' is unacceptable domain kind, specify 'trusted' or 'nontrusted'", option )
+      @option = "trusted"   # とりあえず trusted を設定しておく
+    end
   end
 
@@ -108,4 +120,17 @@
   end
 
+  #== ドメイン種別を返す
+  #return::Symbol :kernel, :user, :OutOfDomain
+  def get_kind
+    case @option
+    when "trusted"
+      return :kernel
+    when "nontrusted"
+      return :user
+    when "OutOfDomain"
+      return :OutOfDomain
+    end
+  end
+
   def joinable?(current_region, next_region, through_type )
     print "HRP2Plugin: joinable? from #{current_region.get_name} to #{next_region.get_name} (#{through_type})\n"
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PostHook.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PostHook.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PostHook.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2012 by TOPPERS Project
+#   Copyright (C) 2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -35,4 +35,5 @@
 #   の責任を負わない．
 #  
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PriorityDataqueuePlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PriorityDataqueuePlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PriorityDataqueuePlugin.rb	(revision 374)
@@ -35,4 +35,5 @@
 #   の責任を負わない．
 #  
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2RPCPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2RPCPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2RPCPlugin.rb	(revision 374)
@@ -35,4 +35,5 @@
 #   の責任を負わない．
 #  
+#   $Id$
 #++
 
@@ -70,5 +71,5 @@
   #=== RPCPlugin の initialize
   #  説明は ThroughPlugin (plugin.rb) を参照
-  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
+  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super
     @b_noClientSemaphore = false
@@ -234,5 +235,5 @@
     if cell.get_allocator_list.length > 0 then
 
-      dbgPrint "make allocator"
+      dbgPrint "make allocator\n"
       file.print "#{indent_str}[allocator("
 
@@ -269,8 +270,14 @@
     nest = @end_region.gen_region_str_pre file
     indent_str = "  " * nest
+    nest_str = "  " * nest
+    if @next_cell_port_subscript then
+      subscript = '[' + @next_cell_port_subscript.to_s + ']'
+    else
+      subscript = ""
+    end
 
     file.print <<EOT
 #{indent_str}cell #{@rpc_channel_celltype_name}Server #{@cell_name}Body {
-#{indent_str}    #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name};
+#{indent_str}    #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
 //#{indent_str}    #{@call_port_name} = #{@next_cell.get_name}.#{@next_cell_port_name};
 #{indent_str}  //cTDR         = #{@channelCellName}.eTDR;
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SVCPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SVCPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SVCPlugin.rb	(revision 374)
@@ -35,4 +35,5 @@
 #   の責任を負わない．
 #  
+#   $Id$
 #++
 
@@ -83,5 +84,5 @@
   @@generated_celltype_header = {}
 
-  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
+  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super
     @ct_name_body = "#{@ct_name}SVCBody_#{@next_cell.get_name}_#{@next_cell_port_name}".to_sym
@@ -217,4 +218,9 @@
     nest = @end_region.gen_region_str_pre file
     nest_str = "  " * nest
+    if @next_cell_port_subscript then
+      subscript = '[' + @next_cell_port_subscript.to_s + ']'
+    else
+      subscript = ""
+    end
 
     # サーバー側チャンネルの生成 
@@ -224,5 +230,5 @@
 #{nest_str}  //  Server Side Channel
 #{nest_str}  cell #{@ct_name_body} #{@cell_name_body}{
-#{nest_str}    #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name};
+#{nest_str}    #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
 #{nest_str}  };
 EOT
@@ -241,4 +247,9 @@
     nest = @start_region.gen_region_str_pre file
     nest_str = "  " * nest
+    if @next_cell_port_subscript then
+      subscript = '[' + @next_cell_port_subscript.to_s + ']'
+    else
+      subscript = ""
+    end
 
     # クライアント側チャンネルの生成
@@ -247,5 +258,5 @@
 #{nest_str}  //  Client Side Channel
 #{nest_str}  cell #{@ct_name} #{@cell_name}{
-#{nest_str}    #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name};
+#{nest_str}    #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
 #{nest_str}  };
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SemaphorePlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SemaphorePlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SemaphorePlugin.rb	(revision 374)
@@ -35,4 +35,5 @@
 #   の責任を負わない．
 #  
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2TaskPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2TaskPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2TaskPlugin.rb	(revision 374)
@@ -53,5 +53,6 @@
     # tab  : 
     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}" )
+        #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$の代わり
         index = cell.get_id - @celltype.get_id_base
@@ -59,7 +60,8 @@
         cell_CB_name = "#{index}"
         # CRE_XXX/DEF_XXXの生成
-        print "assign task plugin\n"
+        dbgPrint "assign task plugin\n"
         domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
         # if cell.get_region.get_region_type == :DOMAIN
+# cell.show_tree 1
         if domainOption != "OutOfDomain"
             # 保護ドメインに属する場合
@@ -69,4 +71,5 @@
                     raise "system task cannot have user stack."
                 end
+p "CRE_TSK 0 user=#{val[:userStackSize]} system=#{val[:systemStackSize]}"
                 file.print <<EOT
 #{tab}CRE_TSK(#{val[:id]}, { #{val[:taskAttribute]}, #{cell_CB_name}, tTask_start_task, #{val[:priority]}, #{val[:systemStackSize]}, NULL });
@@ -77,4 +80,5 @@
                     raise "user task must have user stack."
                 end
+p "CRE_TSK 1"
                 if val[:systemStackSize] == "OMIT"
                     file.print <<EOT
@@ -82,4 +86,5 @@
 EOT
                 else
+p "CRE_TSK 2"
                     file.print <<EOT
 #{tab}CRE_TSK(#{val[:id]}, { #{val[:taskAttribute]}, #{cell_CB_name}, tTask_start_task, #{val[:priority]}, #{val[:userStackSize]}, NULL, #{val[:systemStackSize]}, NULL });
@@ -138,7 +143,7 @@
                     regions = ct.get_domain_roots
                     regions_hrp2 = regions[ :HRP2 ]
-                    print "HRP2 domain in #{ct.get_name}: "
+                    dbgPrint "HRP2 domain in #{ct.get_name}: "
                     regions_hrp2.each { |reg|
-                        print reg.get_name
+                        dbgPrint reg.get_name
                     }
                     puts ""
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPHandlerPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPHandlerPlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPHandlerPlugin.rb	(revision 374)
@@ -0,0 +1,129 @@
+# coding: utf-8
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2018 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#++
+
+require_tecsgen_lib "HRPKernelObjectPlugin.rb"
+
+
+#== celltype プラグインの共通の親クラス
+class HRPHandlerPlugin < HRPKernelObjectPlugin
+
+    ##
+    # oyama: add to avoid Ruby exception in code generation phase.
+    def new_cell cell
+        domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
+        if (domainOption == "OutOfDomain") || (domainOption != "kernel")
+          cdl_error( "HRP9999 HRP handler '$1' must belong to kernel domain", cell.get_name )
+        end
+    end
+
+    ##
+    #
+    # file : output file (ex.tecsgen.cfg)
+    # cell : 
+    # val  : 
+    # tab  : 
+    def print_cfg_cre(file, cell, val, tab)
+        if !val[:id].nil?
+            val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_name.to_s}" )
+        end
+        # $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の生成
+        domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
+        if (domainOption == "OutOfDomain") || (domainOption != "kernel")
+            # 無所属 or ユーザドメインに属する場合
+                raise "#{@plugin_arg_str.to_s.downcase} handler #{val[:id]} must belong to kernel domain."
+        elsif @plugin_arg_str == "CONFIG_INT"
+            file.print <<EOT
+#{tab}CFG_INT( #{val[:interruptNumber]}, { #{val[:attribute]}, #{val[:interruptPriority]} });
+EOT
+        elsif @plugin_arg_str == "ISR"
+            file.print <<EOT
+#{tab}CRE_ISR(#{val[:id]}, { #{val[:attribute]}, #{cell_CBP}, #{val[:interruptNumber]}, tISR_start, #{val[:isrPriority]} });
+EOT
+        elsif @plugin_arg_str == "DEF_INH"
+            name_array = @celltype.get_name_array cell
+            start = @celltype.subst_name( "$id$_start", name_array )
+            file.print <<EOT
+#{tab}DEF_INH(#{val[:interruptHandlerNumber]}, { #{val[:attribute]}, #{start} });
+EOT
+        elsif @plugin_arg_str == "DEF_EXC"
+            name_array = @celltype.get_name_array cell
+            start = @celltype.subst_name( "$id$_start", name_array )
+            file.print <<EOT
+#{tab}DEF_EXC(#{val[:cpuExceptionHandlerNumber]}, { #{val[:attribute]}, #{start} });
+EOT
+        elsif @plugin_arg_str == "INIT_ROUTINE"
+            file.print <<EOT
+#{tab}ATT_INI({ #{val[:attribute]}, #{cell_CBP}, tInitializeRoutine_start });
+EOT
+        elsif @plugin_arg_str == "TERM_ROUTINE"
+            file.print <<EOT
+#{tab}ATT_TER({ #{val[:attribute]}, #{cell_CBP}, tTerminateRoutine_start });
+EOT
+        else
+            raise "#{@plugin_arg_str} is unknown option"
+        end
+    end
+
+    def print_cfg_sac(file, val, acv)
+        if @plugin_arg_str == "CONFIG_INT"
+            # nothing to do
+        elsif @plugin_arg_str == "ISR"
+            # 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"
+        elsif @plugin_arg_str == "DEF_INH"
+            # nothing to do
+        elsif @plugin_arg_str == "DEF_EXC"
+            # nothing to do
+        elsif @plugin_arg_str == "INIT_ROUTINE"
+            # nothing to do
+        elsif @plugin_arg_str == "TERM_ROUTINE"
+            # nothing to do
+        else
+            raise "#{@plugin_arg_str} is unknown option"
+        end
+    end
+
+end
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectManager.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectManager.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectManager.rb	(revision 374)
@@ -0,0 +1,71 @@
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2015-2018 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#
+#   $Id$
+#  
+#++
+# This file has been generated by gen_kernel_celltype.py
+class HRPKernelObjectManager
+	@@kernel_objs = [\
+		:tKernel, \
+		:tTask, \
+		:tSemaphore, \
+		:tEventflag, \
+		:tDataqueue, \
+		:tPriorityDataqueue, \
+		:tMutex, \
+		:tFixedSizeMemoryPool, \
+		:tTimeEventHandler, \
+		:tCyclicNotifier, \
+		:tAlarmNotifier, \
+		:tInterruptRequest, \
+		:tISR, \
+		:tInterruptHandler, \
+		:tCpuExceptionHandler, \
+		:tInitializeRoutine, \
+		:tTerminateRoutine, \
+		:tMessageBuffer, \
+	]
+
+    def initialize()
+        # 
+        #  本クラスはインスタンスを持たない仮想的なクラスである
+        #
+        raise "class #{self.class.name} shall not have instances"
+    end
+    def self.include_celltype?(str)
+        return @@kernel_objs.include?(str)
+    end
+end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectPlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectPlugin.rb	(revision 374)
@@ -0,0 +1,336 @@
+# coding: utf-8
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2018 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#
+#  $Id$
+#++
+
+#== celltype プラグインの共通の親クラス
+class HRPKernelObjectPlugin < CelltypePlugin
+    # @@obj_hash = {}
+
+    #@celltype:: Celltype
+    #@option:: String     :オプション文字列
+    def initialize( celltype, option )
+        super
+        #
+        #  それぞれのカーネルオブジェクトを解析対象セルタイプに追加
+        #  目的：
+        #   - カーネルオブジェクトのセルをメモリ保護対象外とする
+        #    - カーネルオブジェクト本体の管理はTECSでなくOSで実施するため
+        #   - カーネルオブジェクトのセルへのアクセスを直接関数呼出し
+        #   　とする
+        #    - システムサービス呼出しはOSが提供するため
+        HRPKernelObjectPlugin.set_celltype(celltype)
+    end
+  
+    #=== HRPKernelObjectPlugin#print_cfg_cre
+    # 各種カーネルオブジェクトの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"
+    end
+  
+    #=== HRPKernelObjectPlugin#print_cfg_sac
+    # 各種カーネルオブジェクトの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"
+    end
+  
+    #
+    #  セルタイププラグインの本体メソッド
+    #   - 静的APIの生成
+    #  file:: FILE:     出力先ファイル
+    #
+    def gen_factory file
+        dbgPrint "===== begin #{@celltype.get_name.to_s} plugin =====\n"
+
+        #
+        # 対象となるすべてのセルについて、受け口に結合されている
+        # セルの所属ドメインを解析
+        #  - 生成すべきcfgファイル名を取得するために必要
+        #
+        if !HRPKernelObjectPlugin.isChecked()
+            HRPKernelObjectPlugin.check_referenced_cells()
+        else
+            dbgPrint "***** already checked\n"
+        end
+
+        # 追記するために AppFile を使う（文字コード変換されない）
+        file2 = AppFile.open( "#{$gen}/tecsgen.cfg" )
+        file2.print "\n/* Generated by #{self.class.name} */\n\n"
+
+        @celltype.get_cell_list.each { |cell|
+            if cell.is_generate?
+                dbgPrint "===== begin check my domain #{cell.get_name} =====\n"
+                #
+                #  カーネルオブジェクトの属性を，valにコピー
+                #
+                val = {}
+                @celltype.get_attribute_list.each{ |a|
+                    # p a.get_name
+                    if a.get_type.kind_of?( ArrayType )
+                        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
+                            }
+                        else
+                            raise "attribute is not initialized"
+                        end
+                    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
+                            raise "attribute is not initialized"
+                        end
+                    end
+                }
+                # 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$の代わり
+                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の生成
+                if cell_domain_type.get_option.to_s != "OutOfDomain"
+                    # 保護ドメインに属する場合
+                    if !HRPKernelObjectPlugin.include_region(cell_domain_root.get_name.to_s)
+                        # その保護ドメインの.cfgが生成されていない場合
+                        HRPKernelObjectPlugin.set_region_list(cell_domain_root.get_name.to_s)
+                        dbgPrint "~~~~~ #{cell_domain_root.get_name.to_s} is registered!\n"
+
+#                        # if cell.get_region.get_param == :KERNEL_DOMAIN
+#                        if cell_domain_type.get_option.to_s == "kernel"
+#                            file2.print "KERNEL_DOMAIN{\n"
+#                        else
+#                            file2.print "DOMAIN(#{cell_domain_root.get_name.to_s}){\n"
+#                        end
+#                        file2.puts "\tINCLUDE(\"#{$gen}/tecsgen_#{cell_domain_root.get_name.to_s}.cfg\");" 
+#                        file2.puts "}\n"
+                    else
+                        dbgPrint "~~~~~ #{cell.get_region.get_namespace_path} is included in"
+                        #p @@region_list
+                    end
+                    file3 = AppFile.open( "#{$gen}/tecsgen_#{cell_domain_root.get_global_name}.cfg" )
+                    print_cfg_cre(file3, cell, val,"")
+                    file3.close
+                else
+                    # 無所属の場合
+                    dbgPrint "~~~~~ #{cell_domain_root.get_namespace_path} is OutOfDomain\n"
+                    # print "~~~~~ #{cell_domain_root.get_namespace_path} is OutOfDomain\n"
+                    # p cell_domain_root.get_name
+                    if cell_domain_root.get_name == "::" then
+                      print_cfg_cre(file2, cell, val, "")
+                    else
+#                      if !HRPKernelObjectPlugin.include_region(cell_domain_root.get_name.to_s)
+#                        # その保護ドメインの.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"
+#                      end
+                      file3 = AppFile.open( "#{$gen}/tecsgen_#{cell_domain_root.get_name.to_s}.cfg" )
+                      print_cfg_cre(file3, cell, val,"")
+                      file3.close
+                    end
+
+                end
+
+                dbgPrint "===== end check my domain #{cell.get_name} =====\n"
+
+                #
+                # SAC_XXXの生成
+                #
+                if !val[:accessPattern1].nil?
+                    dbgPrint "===== begin check regions #{cell.get_name} =====\n"
+                    i = 0
+                    acv = { \
+                            :accessPattern1 => val[:accessPattern1], \
+                            :accessPattern2 => val[:accessPattern2], \
+                            :accessPattern3 => val[:accessPattern3], \
+                            :accessPattern4 => val[:accessPattern4] \
+                    }
+                    acv_tmp = []
+                    domain_roots = HRPPlugin.get_inter_domain_join_roots cell
+                    # 結合先セルのドメインを加える
+                    if cell_domain_type.get_kind != :OutOfDomain then
+                      domain_roots << cell_domain_root
+                    end
+                    domain_roots.each{ |dr|
+                      case dr.get_domain_type.get_kind
+                      when :user
+                        acv_tmp << "TACP(#{dr.get_name})"
+                      when :kernel
+                        acv_tmp << "TACP_KERNEL"
+                      when :OutOfDomain
+                        if cell_domain_type.get_kind == :OutOfDomain then
+                          # 呼び元も、呼び先も OutOfDomain の場合
+                          acv_tmp << "TACP_SHARED"
+                        end
+                      end
+                    }
+                    acv_tmp.uniq!
+                    if acv_tmp.length == 0 then
+                      # 呼び先セルが無所属かつ、呼び元も無所属のみ、または結合無しの場合
+                      acv_tmp = [ "TACP_SHARED" ]
+                    end
+                    b_info = false
+                    b_warn = false
+                    acv.each { |key, acp|
+                        if !acp.nil?
+                            if acp != "OMIT"
+                            elsif cell_domain_type.get_kind != :OutOfDomain
+                              # p "UserDomainCell or KernelDomainCell"
+                              domain_roots = HRPPlugin.get_inter_domain_join_roots cell
+                              domain_roots.each{ |dr|
+                                # 
+                                case dr.get_domain_type.get_kind
+                                when :kernel
+                                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 )
+                                      b_warn = true
+                                    end
+                                  end
+                                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
+                                    end
+                                  end
+                                else
+                                  raise "unknown domain kind"
+                                end
+                              }
+                              # acv[key] = "TACP(#{cell_domain_root.get_name.to_s})"
+                            else
+                              # p "OutOfDomainCell"
+                              # 無所属のセル
+                              # 結合元ドメインに許可する
+                              # 結合元に無所属のセルがあると、TACP_SHARED が設定される. フロー解析してドメインを特定できるのが、あるべき仕様
+                            end
+                            if acp == "OMIT"
+                              acv[key] = acv_tmp.join( '|' )
+                            end 
+                        end
+                    }
+                    #各種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
+
+                    dbgPrint "===== end check regions #{cell.get_name} =====\n"
+                end
+            end
+        }
+        dbgPrint "===== end #{@celltype.get_name.to_s} plugin =====\n"
+        file2.close
+    end
+
+    # カーネルオブジェクトセルタイプの管理
+    # HRPKernelObjectPluginクラスに対してメソッド呼出しを行うことを想定
+    @@checked = false
+    @@celltype_list = []
+    @@region_list = []
+
+    def self.isChecked()
+        return @@checked
+    end
+
+    def self.check_referenced_cells()
+        dbgPrint "===== begin check registered celltype =====\n"
+        self.get_celltype_list.each { |ct|
+          dbgPrint( ct.get_name.to_s + "\n" )
+        }
+        dbgPrint "===== end check registered celltype =====\n"
+
+        @@checked = true
+    end
+
+    def self.set_celltype( celltype )
+        @@celltype_list << celltype
+    end
+
+    def self.get_celltype_list
+        return @@celltype_list
+    end
+
+    def self.set_region_list( region )
+        @@region_list << region
+    end
+
+    def self.include_region( region )
+        return @@region_list.include?(region)
+    end
+
+    def self.include_celltype?( celltype )
+        return @@celltype_list.include?(celltype)
+    end
+
+end
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPObjectPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPObjectPlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPObjectPlugin.rb	(revision 374)
@@ -0,0 +1,97 @@
+# coding: utf-8
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2018 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#  $Id$
+#++
+
+require_tecsgen_lib "HRPKernelObjectPlugin.rb"
+
+
+class HRPObjectPlugin < HRPKernelObjectPlugin
+    @@api = {
+        "SEMAPHORE"=>["SEM", :id, :attribute, :initialCount, :maxCount],
+        "EVENTFLAG"=>["FLG", :id, :attribute, :flagPattern],
+        "DATAQUEUE"=>["DTQ", :id, :attribute, :dataCount, :dataqueueManagementBuffer],
+        "PRIORITY_DATAQUEUE"=>["PDQ", :id, :attribute, :dataCount, :maxDataPriority, :priorityDataqueueManagementBuffer],
+        "FIXED_SIZE_MEMORYPOOL"=>["MPF", :id, :attribute, :blockCount, :blockSize, :memoryPool, :memoryPoolManagementBuffer],
+        "KERNEL"=>["SYS"],
+        "MESSAGE_BUFFER"=>["MBF", :id, :attribute, :maxMessageSize, :bufferSize, :mbfmb],
+        "MUTEX"=>["MTX", :id, :attribute, :ceilingPriority]
+    }
+
+    #=== HRPObjectPlugin#print_cfg_cre
+    # 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
+            raise "#{@plugin_arg_str} is unknown"
+        elsif @plugin_arg_str != "KERNEL"
+            arg_list = []
+            params = @@api[@plugin_arg_str]
+            if @plugin_arg_str == "MUTEX" && ((val[:attribute] =~ /\bTA_CEILING\b/)==nil)
+              slice_end = -2   # :ceilingPriority を外す
+            else
+              slice_end = -1
+            end
+            # p @plugin_arg_str, slice_end, val[:attribute], (val[:attribute] =~ /\bTA_CEILING\b/)
+            params.slice(2..slice_end).each { |attr|
+                arg_list << "#{val[attr]}"
+            }
+            file.print tab
+            file.puts "CRE_#{@@api[@plugin_arg_str].at(0)}(#{val[:id]}, { #{arg_list.join(", ")} });"
+        end
+    end
+    #=== HRPObjectPlugin#print_cfg_sac
+    # SAC_XXXの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # acv :: string:   アクセスベクタ    
+    def print_cfg_sac(file, val, acv)
+        if @@api.has_key?(@plugin_arg_str) == false
+            raise "#{@plugin_arg_str} is unknown"
+        elsif @plugin_arg_str != "KERNEL"
+            file.puts "SAC_#{@@api[@plugin_arg_str].at(0)}(#{val[:id]}, { #{acv[:accessPattern1]}, #{acv[:accessPattern2]}, #{acv[:accessPattern3]}, #{acv[:accessPattern4]} });"
+        else
+            file.puts "SAC_#{@@api[@plugin_arg_str].at(0)}({ #{acv[:accessPattern1]}, #{acv[:accessPattern2]}, #{acv[:accessPattern3]}, #{acv[:accessPattern4]} });"
+        end
+    end
+
+end
+
+
+  
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPPlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPPlugin.rb	(revision 374)
@@ -0,0 +1,355 @@
+# coding: utf-8
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2014-2018 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#  $Id$
+#++
+
+
+require_tecsgen_lib "HRPKernelObjectManager.rb"
+#
+# 各メソッドの役割りは、DomainPlugin.rb を参照のこと
+# HRPカーネル用ドメインプラグイン
+class HRPPlugin < DomainPlugin
+  
+  def initialize( region, name, option )
+    super
+    dbgPrint "HRPPlugin: initialize: region=#{region.get_name}, domainName=#{name}, option=#{option}\n"
+    @region = region
+    @name   = name
+    case option
+    when "kernel", "user", "OutOfDomain"
+      # OK
+      @option = option
+    else
+      cdl_error( "HRPPlugin: '$1' is unacceptable domain kind, specify 'kernel' or 'user'", option )
+      @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 の説明参照)
+    # 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"
+
+    #puts "=====Join Check Start====="
+    #puts "caller: #{join.get_owner.get_name.to_s}, callee: #{join.get_cell.get_name.to_s}"
+    #puts "=====Join Check param====="
+    current_domain = current_region.get_domain_root.get_domain_type
+    next_domain = next_region.get_domain_root.get_domain_type
+    #puts current_domain.get_option.to_s
+    # if !next_domain.nil?
+    #     puts next_domain.get_option.to_s
+    # else
+    #     puts "next domain is nil!"
+    # end
+
+    HRPPlugin.add_inter_domain_join_set join
+    # p join.get_cell.get_name
+    # p join.get_cell.get_real_celltype(join.get_rhs_port1).get_name
+    # if HRPKernelObjectManager.include_celltype?(join.get_cell.get_celltype.get_global_name)   #oyama: get_name => get_global_name 
+    if HRPKernelObjectManager.include_celltype?(join.
+                                                 get_cell.
+                                                 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
+        # puts "***** #{join.get_cell.get_celltype.get_name} is kernel object"
+        return []
+        # return [ :HRP2SVCPlugin, "channelCelltype=tMessagebufferChannel,noClientSemaphore=true" ]
+    # elsif @end_region.is_root?
+    # elsif next_region.get_option == OutOfDomain
+    # elsif next_domain.nil?
+    elsif next_domain.get_option.to_s == "OutOfDomain"
+    #     # 結合先が無所属
+    #     # 何もしないthrough
+    #     # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
+        # puts "***** nil"
+        return []
+    #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"
+        # return [ :HRPRPCPlugin, "channelCelltype=tMessagebufferChannel,noClientSemaphore=true" ]
+        # puts "HRPPlugin:RPC:PPAllocatorSize=256"
+        return [ :HRPRPCPlugin, "noClientSemaphore=false,PPAllocatorSize=256" ]
+    else
+        # その他
+        # 何もしない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"
+        return nil
+    end
+
+    # puts "=====Join Check End====="
+  end
+
+  def joinable?(current_region, next_region, through_type )
+    dbgPrint "MyDomainPlugin: joinable? from #{current_region.get_name} to #{next_region.get_name} (#{through_type})\n"
+    return true
+  end
+
+  #== ドメイン種別を返す
+  #return::Symbol :kernel, :user, :OutOfDomain
+  def get_kind
+    return @option.to_sym
+  end
+  
+  def self.gen_post_code file
+  end
+
+  # ATT_MODを生成済みかどうか                   # 2017.8.27
+  @@generate_memory_module = false
+
+  @@include_extsvc_fncd = false  # 17.07.26 暫定
+  # 
+  #  ATT_MODの生成
+  #  gen_factory実行時には，すべてのセルタイププラグインを生成済みのはずなので，
+  #  カーネルAPIコードのメモリ保護を省略できる．
+  #
+  def gen_factory
+    super
+
+    if @@include_extsvc_fncd == false
+      file = AppFile.open( "#{$gen}/tecsgen.cfg" )
+      file.print "/* HRPPlugin 001 */\n"
+      file.print "#include \"extsvc_fncode.h\"\n"   ## 2017.7.26
+      file.close
+      @@include_extsvc_fncd = true
+    end
+
+    if @@generate_memory_module == false
+
+      # INCLUDE を出力
+      #  すべてのドメインに対する cfg を先に生成しておく
+      #  もし、ドメインに属するカーネルオブジェクトも、モジュールもない場合でも、cfg が出力される
+      regions = DomainType.get_domain_regions[ :HRP ]
+      file = AppFile.open( "#{$gen}/tecsgen.cfg" )
+      file.print "/* HRPPlugin 002 */\n"
+      regions.each{ |region|
+        if ! region.is_root? then
+          nsp = "#{region.get_global_name}"
+          file2 = AppFile.open( "#{$gen}/tecsgen_#{nsp}.cfg" )
+          file2.close
+          case region.get_domain_type.get_kind
+          when :kernel
+            pre = "KERNEL_DOMAIN{\n    "
+            post = "}\n"
+          when :user
+            pre = "DOMAIN(#{region.get_name}){\n    "
+            post = "}\n"
+          when :OutOfDomain
+            pre = ""
+            post = "\n"
+          end
+          file.puts "#{pre}INCLUDE(\"#{$gen}/tecsgen_#{nsp}.cfg\");\n#{post}"
+        end
+      }
+      file.print "/* HRPPlugin 002 end */\n\n"
+      file.close
+
+      check_celltype_list = []
+
+      # 
+      #  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
+          # next if HRPKernelObjectManager.include_celltype?( ct.get_name )
+
+          # 必要のないセルタイプのコード，データはメモリ保護しない
+          next if ! ct.need_generate?
+
+          # HRPのドメインリージョンを取得
+          regions = ct.get_domain_roots
+          regions_hrp = regions[ :HRP ]
+          dbgPrint "HRP domain in #{ct.get_name}: "
+          regions_hrp.each { |reg|
+            dbgPrint reg.get_name
+          }
+          # puts ""
+
+          # セル管理ブロックとスケルトンのメモリ保護
+          # gen_celltype_names_domain 相当の処理
+          if regions_hrp.include?( Region.get_root ) == false && regions_hrp.length > 1
+            # ドメインが複数で，OutOfDomainにセルが存在しないセルタイプの場合
+            # 共有のセル管理ブロックとスケルトンコードを登録する
+            file = AppFile.open( "#{$gen}/tecsgen.cfg" )
+            file.printf "%-60s/* HRPPlugin 003 */\n", "ATT_MOD(\"#{ct.get_global_name}_tecsgen.o\");"
+            file.close
+          end
+
+          regions_hrp.each { |reg|
+            if reg.is_root? 
+              nsp = ""
+            else
+              nsp = "_#{reg.get_global_name}"
+            end
+            file = AppFile.open( "#{$gen}/tecsgen#{nsp}.cfg" )
+            file.printf "%-50s/* HRPPlugin 004 */\n", "ATT_MOD(\"#{ct.get_global_name}#{nsp}_tecsgen.o\");"
+            file.close
+          }
+
+          # セルタイプコードがない場合はスキップ
+          next if ct.is_all_entry_inline? && ! ct.is_active?
+
+          # セルタイプコードのメモリ保護
+          # gen_celltype_names_domain2 相当の処理
+          if regions_hrp.include?( Region.get_root ) == true || regions_hrp.length > 1
+            # OutOfDomainにセルが存在するセルタイプの場合
+            # または，複数のドメインにセルが存在するセルタイプの場合
+            # セルタイプコードを共有するように登録する
+            file = AppFile.open( "#{$gen}/tecsgen.cfg" )
+          else
+            # OutOfDomainでない単一のドメインにセルが存在するセルタイプの場合
+            # セルタイプコードを専有するように登録する
+            file = AppFile.open( "#{$gen}/tecsgen_#{regions_hrp[0].get_global_name}.cfg" )
+          end
+
+          file.printf "%-50s/* HRPPlugin 005 */\n", "ATT_MOD(\"#{ct.get_global_name}.o\");"
+          file.close
+        else
+          # 何もしない
+        end
+      }
+
+      @@generate_memory_module = true
+    else
+      # 何もしない
+    end
+  end
+
+  #----- Inter Domain Join Set -----#
+  @@inter_domain_join_set = {}      #{entry_cell =>{domain_root=>count} }  Hash of inter domain join
+  def self.add_inter_domain_join_set join
+    rhs_cell = join.get_cell
+    dbgPrint "--------- add_inter_domain:#{join.get_owner.get_namespace_path} => #{join.get_cell.get_namespace_path}-----\n"
+    domain_root = join.get_owner.get_region.get_domain_root   # lhs cell's domain root
+    if @@inter_domain_join_set[ rhs_cell ] == nil then
+      @@inter_domain_join_set[ rhs_cell ] = []
+    end
+    # 左辺のドメインルートを記録
+    @@inter_domain_join_set[ rhs_cell ] << join
+  end
+  def self.get_inter_domain_join_set rhs_cell
+    if @@inter_domain_join_set[ rhs_cell ] then
+      @@inter_domain_join_set[ rhs_cell ].uniq!
+    else
+      @@inter_domain_join_set[ rhs_cell ] = []
+    end
+    return @@inter_domain_join_set[ rhs_cell ]
+  end
+  def self.get_inter_domain_join_roots rhs_cell
+    dbgPrint "--------- get_inter_domain #{rhs_cell.get_namespace_path} -----\n"
+    domain_roots = []
+    set = get_inter_domain_join_set rhs_cell
+    set.each{ |join|
+      dbgPrint "--------- get_inter_domain:#{join.get_owner.get_namespace_path} => #{join.get_cell.get_namespace_path}-----\n"
+      # if join.get_owner.get_region.get_domain_root.get_domain_type.get_option == "user" then
+        domain_roots << join.get_owner.get_region.get_domain_root
+      # end
+    }
+    return domain_roots.uniq
+  end
+
+  def self.get_sac_str cell
+    domain_roots = self.get_inter_domain_join_roots cell
+    delim = ""
+    acv = ""
+    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  # 結合先のドメインも含める
+    end
+    domain_roots.each{ |dr|
+      case dr.get_domain_type.get_kind
+      when :kernel
+        acv += "#{delim}TACP_KERNEL"
+        delim = "|"
+      when :user
+        acv += "#{delim}TACP(#{dr.get_name})"
+        delim = "|"
+        if cell_domain_root.get_domain_type.get_kind != :OutOfDomain &&
+           dr.get_namespace_path != cell_domain_root.get_namespace_path 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 )
+        end
+      when :OutOfDomain
+        if cell_domain_root.get_domain_type.get_kind == :OutOfDomain then
+          acv += "#{delim}TACP_SHARED"
+          delim = "|"
+        end
+      else
+        raise "unkown domain kind"
+      end
+    }
+    if acv == "" then
+      # 呼び先セルが無所属かつ、呼び元も無所属のみ、または結合無しの場合
+      acv = "TACP_SHARED"
+    end
+    sac_str = "{"
+    delim = ""
+    [:accessPattern1, :accessPattern2, :accessPattern3, :accessPattern4].each{ |acp|
+      init = (cell.get_attr_initializer acp).to_s
+      if init != "OMIT"
+        sac_str += delim + init
+      else
+        sac_str += delim + acv
+      end
+      delim = ", "
+    }
+    return sac_str + '}'
+  end
+end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPRPCPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPRPCPlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPRPCPlugin.rb	(revision 374)
@@ -0,0 +1,415 @@
+# coding: utf-8
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2018 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#  $Id$
+#++
+
+require_tecsgen_lib "lib/GenOpaqueMarshaler.rb"
+require_tecsgen_lib "lib/GenParamCopy.rb"
+
+#= HRPRPCPlugin プラグイン
+# スループラグイン (through)
+# ・OpaqueMarshalerPlugin を使用してマーシャラセルタイプを生成する
+# ・マーシャラ、TDR、チャンネル、メッセージバッファを生成する
+#
+class HRPRPCPlugin < ThroughPlugin
+
+  include GenOpaqueMarshaler
+  include GenParamCopy
+
+  # 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) を参照
+  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
+    super
+    @b_noClientSemaphore = false
+    @semaphoreCelltype = "tSemaphore"
+    initialize_opaque_marshaler
+
+    # オプション：GenOpaqueMarshaler 参照
+    @plugin_arg_check_proc_tab = HRPRPCPluginArgProc
+    parse_plugin_arg
+
+    @rpc_channel_celltype_name = "tRPCPlugin_#{@TDRCelltype}_#{@channelCelltype}_#{@signature.get_name}"
+    @rpc_channel_celltype_file_name = "#{$gen}/#{@rpc_channel_celltype_name}.cdl"
+
+    if @signature.get_context == "non-task" then
+        cdl_error( "HRP9999 RPC cannot be applied to non-task context signature '$1'", @signature.get_name )
+    elsif @signature.get_context == "any" then
+        cdl_info( "HRP9999 RPC is applied to any context signature '$1'", @signature.get_name )
+    end
+
+    if @signature.need_PPAllocator?(true) then
+      if @PPAllocatorSize == nil then
+        cdl_error( "HRP9999 PPAllocatorSize must be speicified for pointer argments" )
+        # @PPAllocatorSize = 0   # 仮に 0 としておく (cdl の構文エラーを避けるため)
+      end
+    elsif @PPAllocatorSize then
+      cdl_warning( "HRP9999 PPAllocatorSize speicified in spite of PPAllocator unnecessary" )
+      @PPAllocatorSize = nil
+    end
+
+#    @signature.each_param{ |func_decl, param_decl|
+#      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 文字列の配列
+#        elsif param_decl.get_string == -1 then
+#          cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" )  # mikan 長さ未指定文字列
+#        end
+#      end
+#    }
+
+    # 
+    #  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" )
+    #     f.puts "INCLUDES := $(INCLUDES) -I $(TECSPATH) -I $(TECSPATH)/rpc"
+    #     f.puts "vpath %.c $(TECSPATH) $(TECSPATH)/rpc"
+    #     f.close()
+    #     @@isFirstInstance = false
+    # end
+  end
+
+  #=== 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 ]
+    else
+      @@generated_celltype[ ct_name ] << self
+      return
+    end
+
+    f = CFile.open( @rpc_channel_celltype_file_name, "w" )
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
+
+    f.print <<EOT
+import( <rpc.cdl> );
+import( <tMessageBufferCEP.cdl> );
+generate( OpaqueMarshalerPlugin, #{@signature.get_namespace_path}, "" );
+
+composite tOpaqueMarshaler_#{@signature.get_global_name}_through {
+  entry #{@signature.get_namespace_path} eThroughEntry;
+  call sTDR       cTDR;
+  [optional]
+    call sSemaphore cLockChannel;
+  [optional]
+    call sRPCErrorHandler cErrorHandler;
+
+  cell tOpaqueMarshaler_#{@signature.get_global_name} Marshaler{
+    cTDR          => composite.cTDR;
+    cLockChannel  => composite.cLockChannel;
+    cErrorHandler => composite.cErrorHandler;
+  };
+  composite.eThroughEntry => Marshaler.eClientEntry;
+};
+
+EOT
+
+    f.close
+  end
+
+  #===  through cell コードを生成
+  #
+  #
+  def gen_through_cell_code( file )
+
+    gen_plugin_decl_code( file )
+    file.print <<EOT
+import( <#{@rpc_channel_celltype_file_name}> );
+EOT
+
+    case @start_region.get_domain_root.get_domain_type.get_kind
+    when :kernel
+      tacp_str = "\"TACP_KERNEL"
+    when :user
+      tacp_str = "\"TACP(#{@start_region.get_domain_root.get_name})"
+    when :OutOfDomain
+      tacp_str = "\"TACP_SHARED"
+    end
+    # p "end_region=#{@end_region.get_name} kind=#{@end_region.get_domain_root.get_domain_type.get_kind}"
+    case @end_region.get_domain_root.get_domain_type.get_kind
+    when :kernel
+      tacp_str += "|TACP_KERNEL\""
+    when :user
+      tacp_str += "|TACP(#{@end_region.get_domain_root.get_name})\""
+    when :OutOfDomain
+      tacp_str += "|TACP_SHARED\""
+    end
+    nest_str = ""
+    file.print <<EOT
+#{nest_str}  //  MessageBuffer client=>server
+#{nest_str}  cell tMessageBuffer #{@clientChannelCell}Body0{
+#{nest_str}      maxMessageSize = 64;      /* This value must be same as MessageBufferCEP's buffer size */
+#{nest_str}      bufferSize     = 128;
+#{nest_str}      accessPattern1 = C_EXP( #{tacp_str} );
+#{nest_str}      accessPattern2 = C_EXP( #{tacp_str} );
+#{nest_str}      accessPattern3 = C_EXP( #{tacp_str} );
+#{nest_str}      accessPattern4 = C_EXP( #{tacp_str} );
+#{nest_str}  };
+EOT
+    file.print <<EOT
+
+#{nest_str}  //  MessageBuffer server=>client
+#{nest_str}  cell tMessageBuffer #{@clientChannelCell}Body1{
+#{nest_str}      maxMessageSize = 64;      /* This value must be same as MessageBufferCEP's buffer size */
+#{nest_str}      bufferSize     = 128;
+#{nest_str}      accessPattern1 = C_EXP( #{tacp_str} );
+#{nest_str}      accessPattern2 = C_EXP( #{tacp_str} );
+#{nest_str}      accessPattern3 = C_EXP( #{tacp_str} );
+#{nest_str}      accessPattern4 = C_EXP( #{tacp_str} );
+#{nest_str}  };
+EOT
+
+    ##### クライアント側のセルの生成 #####
+    nest = @start_region.gen_region_str_pre file
+    nest_str = "  " * nest
+
+    # セマフォの生成
+    if @b_noClientSemaphore == false then
+      file.print <<EOT
+#{nest_str}  //  Semaphore for Multi-task use ("specify noClientSemaphore" option to delete this)
+#{nest_str}  cell #{@semaphoreCelltype} #{@serverChannelCell}_Semaphore{
+#{nest_str}    initialCount = 1;
+#{nest_str}  };
+EOT
+    end
+
+    # クライアント側チャンネル (tMessageBufferCEP)の生成
+    # チャンネルは必ずリージョン下にあるので、 '::' でつなぐ (でなければ、ルートリージョンにないかチェックが必要）
+
+    file.print <<EOT
+#{nest_str}  //  Client Side Channel
+#{nest_str}  cell tMessageBufferCEP #{@clientChannelCell}_CEP{
+#{nest_str}      cMessageBuffer0 = #{@clientChannelCell}Body0.eMessageBuffer;
+#{nest_str}      cMessageBuffer1 = #{@clientChannelCell}Body1.eMessageBuffer;
+#{nest_str}  };
+
+#{nest_str}  //  Client Side TDR
+#{nest_str}  cell tTDR #{@clientChannelCell}_TDR{
+#{nest_str}    cChannel = #{@clientChannelCell}_CEP.eChannel;
+#{nest_str}  };
+
+#{nest_str}  //  Marshaler
+EOT
+
+    # セマフォの結合文
+    if @b_noClientSemaphore == false then
+      semaphore = "#{nest_str}    cLockChannel = #{@serverChannelCell}_Semaphore.eSemaphore;\n"
+    else
+      semaphore = ""
+    end
+
+    ### クライアント側チャンネル (マーシャラ+TDR)の生成 ###
+    cell = @next_cell
+    # アロケータの指定があるか？
+    if cell.get_allocator_list.length > 0 then
+
+      file.print nest_str
+      file.print "[allocator("
+
+      delim = ""
+      cell.get_allocator_list.each do |type, eport, subsc, func, buf, alloc|
+
+        alloc_str = alloc.to_s
+        subst = @substituteAllocator[alloc_str.to_sym]
+        if subst then
+          alloc_str = subst[2]+"."+subst[3]
+        end
+
+        file.print delim
+        delim = ",\n"        # 最終行には出さない
+
+        if subsc then        # 配列添数
+          subsc_str = '[#{subsc}]'
+        else
+          subsc_str = ""
+        end
+
+        eport = "eThroughEntry" #RPCの受け口名に変更
+        file.print nest_str
+        file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc_str}"
+      end
+
+      file.puts ")]"
+    end
+
+    if @clientErrorHandler then
+      clientErrorHandler_str = "#{nest_str}    cErrorHandler = #{@clientErrorHandler};\n"
+    else
+      clientErrorHandler_str = ""
+    end
+
+    file.print <<EOT
+#{nest_str}  cell tOpaqueMarshaler_#{@signature.get_global_name}_through #{@cell_name} {
+#{nest_str}    cTDR = #{@clientChannelCell}_TDR.eTDR;
+#{clientErrorHandler_str}#{semaphore}#{nest_str}  };
+EOT
+    ### END: クライアント側チャンネル (マーシャラ+TDR)の生成 ###
+    @start_region.gen_region_str_post file
+    file.print "\n\n"
+
+    ##### サーバー側のセルの生成 #####
+    nest = @end_region.gen_region_str_pre file
+    nest_str = "  " * nest
+
+    if @serverErrorHandler then
+      serverErrorHandler_str = "#{nest_str}    cErrorHandler = #{@serverErrorHandler};\n"
+    else
+      serverErrorHandler_str = ""
+    end
+
+    if @b_genOpener then
+      opener = "#{nest_str}    cOpener       = #{@serverChannelCell}.eOpener;\n"
+    else
+      opener = ""
+    end
+
+    # サーバー側チャンネル (tMessageBufferCEP)
+    if @PPAllocatorSize then
+      alloc_cell =<<EOT
+
+#{nest_str}  cell tPPAllocator #{@serverChannelCell}_PPAllocator {
+#{nest_str}    heapSize = #{@PPAllocatorSize};
+#{nest_str}  };
+EOT
+      alloc_call_port_join = "#{nest_str}    cPPAllocator = #{@serverChannelCell}_PPAllocator.ePPAllocator;\n"
+    else
+      alloc_cell = ""
+      alloc_call_port_join = ""
+    end
+
+    file.print <<EOT
+#{nest_str}  //  Server Side Channel
+#{nest_str}  cell tMessageBufferCEP #{@serverChannelCell}_CEP{
+#{nest_str}      cMessageBuffer0 = #{@clientChannelCell}Body1.eMessageBuffer;
+#{nest_str}      cMessageBuffer1 = #{@clientChannelCell}Body0.eMessageBuffer;
+#{nest_str}  };
+EOT
+
+    # サーバー側TDR
+    file.print <<EOT
+
+#{nest_str}  //  Server Side TDR
+#{nest_str}  cell tTDR #{@serverChannelCell}_TDR{
+#{nest_str}    cChannel = #{@serverChannelCell}_CEP.eChannel;
+#{nest_str}  };
+EOT
+
+    if @next_cell_port_subscript then
+      subscript = '[' + @next_cell_port_subscript.to_s + ']'
+    else
+      subscript = ""
+    end
+
+    # サーバー側チャンネル (アンマーシャラ)
+    file.print <<EOT
+#{alloc_cell}
+#{nest_str}  //  Unmarshaler
+#{nest_str}  cell tOpaqueUnmarshaler_#{@signature.get_global_name} #{@serverChannelCell}_Unmarshaler {
+#{nest_str}    cTDR        = #{@serverChannelCell}_TDR.eTDR;
+#{nest_str}    cServerCall = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
+#{alloc_call_port_join}#{serverErrorHandler_str}#{nest_str}  };
+EOT
+
+    # サーバー側タスクメイン
+    file.print <<EOT
+
+#{nest_str}  //  Unmarshaler Task Main
+#{nest_str}  cell #{@taskMainCelltype} #{@serverChannelCell}_TaskMain {
+#{nest_str}    cMain         = #{@serverChannelCell}_Unmarshaler.eService;
+#{opener}#{nest_str}  };
+EOT
+
+    # サーバー側タスク
+    file.print <<EOT
+
+#{nest_str}  //  Unmarshaler Task
+#{nest_str}  cell #{@taskCelltype} #{@serverChannelCell}_Task {
+#{nest_str}    cTaskBody = #{@serverChannelCell}_TaskMain.eMain;
+#{nest_str}    priority  = #{@taskPriority};
+#{nest_str}    stackSize = #{@stackSize};
+#{nest_str}    attribute = C_EXP( "TA_ACT" );  /* mikan : marshaler task starts at beginning */
+#{nest_str}  };
+EOT
+    @end_region.gen_region_str_post file
+  end
+
+
+  #=== プラグイン引数 noClientSemaphore のチェック
+  def set_noClientSemaphore rhs
+    rhs = rhs.to_sym
+    if rhs == :true then
+      @b_noClientSemaphore = true
+    elsif rhs == :false then
+      @b_noClientSemaphore = false
+    else
+      cdl_error( "RPCPlugin: specify true or false for noClientSemaphore" )
+    end
+  end
+
+  #=== プラグイン引数 semaphoreCelltype のチェック
+  def set_semaphoreCelltype rhs
+    @semaphoreCelltype = rhs.to_sym
+    nsp = NamespacePath.analyze( @semaphoreCelltype.to_s )
+    obj = Namespace.find( nsp )
+    if ! obj.instance_of?( Celltype ) && ! obj.instance_of?( CompositeCelltype ) then
+      cdl_error( "RPCPlugin: semaphoreCelltype '#{rhs}' not celltype or not defined" )
+    end
+  end
+
+  #=== NamespacePath を得る
+  # 生成するセルの namespace path を生成する
+  def get_cell_namespace_path
+#    nsp = @region.get_namespace.get_namespace_path
+    nsp = @start_region.get_namespace_path
+    return nsp.append( @cell_name )
+  end
+
+end
+
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPSVCPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPSVCPlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPSVCPlugin.rb	(revision 374)
@@ -0,0 +1,861 @@
+# coding: utf-8
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2018 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#  $Id$
+#++
+
+# 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 のサイズが同じ
+#  有符号、無符号でサイズが同じ
+
+class SVCManage
+    #
+    #  @@id: TECSのプラグインで生成した拡張サービスコールに割り当てるid
+    #        実際の拡張サービスコールIDは，TFN_TECSGEN_ORIGINで下駄を
+    #        履かせた値となる
+    #        TFN_TECSGEN_ORIGINは，hrp3/include/extsvc_fncode.h で定義
+    #        される
+    #  @@func_ids: 拡張サービスコールの関数名と拡張サービスコールIDを
+    #  　　　対応づけるハッシュ
+    #
+    @@id = 0
+    @@func_ids = {}
+    def initialize()
+        # 
+      #  本クラスはインスタンスを持たない仮想的なクラスである
+        #
+        raise "class #{self.class.name} shall not have instances"
+    end
+    def self.get_func_id func_name
+        return @@func_ids[ func_name ]
+    end
+    def self.set_func_id func_name
+        @@func_ids[ func_name ] = self.assign_id
+        # puts @@func_ids[ func_name ]
+    end
+    def self.get_id
+        return @@id
+    end
+    def self.set_id id
+        @@id = id
+    end
+    def self.assign_id
+        assignedId = @@id
+        @@id += 1
+        return assignedId
+    end
+end
+
+#
+#  拡張サービスコールを用いたドメイン間通信の
+#  throughプラグイン
+#  HRPドメインプラグインによって挿入される
+#  前提条件: 呼出し先がカーネルオブジェクトかどうかの判定はHRPドメインプラグイン
+#  　　　　　で実施されるため，ここでは判定しないこととした
+#
+class HRPSVCPlugin < ThroughPlugin
+
+  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) つしか渡せない引数の一つを消費することになるため。
+    if @next_cell_port_subscript then
+      subscript = "__" + @next_cell_port_subscript.to_s
+    else
+      subscript = ""
+    end
+    @ct_name_body = "#{@ct_name}SVCBody_#{@next_cell.get_name}_#{@next_cell_port_name}#{subscript}".to_sym
+    @ct_name = "#{@ct_name}SVCCaller_#{@next_cell.get_name}_#{@next_cell_port_name}#{subscript}".to_sym
+    @cell_name_body = "#{@cell_name}SVCBody".to_sym
+    @cell_name = "#{@cell_name}SVCCaller".to_sym
+    # puts "%%%% "
+    # p @next_cell.get_name
+    # p @caller_cell.get_name
+    @b_printed_include_stdint = false
+    check_signature signature
+  end
+
+  #=== NamespacePath を得る
+  # 生成するセルの namespace path を生成する
+  def get_cell_namespace_path
+#    nsp = @region.get_namespace.get_namespace_path
+    nsp = @start_region.get_namespace_path
+    return nsp.append( @cell_name )
+  end
+
+  def gen_plugin_decl_code( file )
+
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
+    if @@generated_celltype[ @ct_name_body ] == nil then
+        @@generated_celltype[ @ct_name_body ] = [ self ]
+        file2 = CFile.open( "#{$gen}/#{@ct_name_body}.cdl", "w" )
+        file2.print <<EOT
+import_C( "t_stdlib.h" );
+
+/* HRPSVC0001 */
+[active,singleton]
+celltype #{@ct_name_body} {
+    call #{@signature.get_name} #{@call_port_name};
+    FACTORY {
+		write("$ct$_tecsgen.h", "#include \\"kernel_cfg.h\\"");
+    };
+};
+EOT
+        file2.close
+    else
+      @@generated_celltype[ @ct_name_body ] << self
+    end
+    file.print "import( \"#{$gen}/#{@ct_name_body}.cdl\" );\n"
+
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
+    if @@generated_celltype[ @ct_name ] == nil then
+        @@generated_celltype[ @ct_name ] = [ self ]
+        file2 = CFile.open( "#{$gen}/#{@ct_name}.cdl", "w" )
+        file2.print <<EOT
+/* HRPSVC0002 */
+celltype #{@ct_name} {
+    entry #{@signature.get_name} #{@entry_port_name};
+    FACTORY {
+		write("$ct$_tecsgen.h", "#include \\"extsvc_fncode.h\\"");
+    };
+};
+EOT
+        file2.close
+    else
+      @@generated_celltype[ @ct_name ] << self
+    end
+    file.print "import( \"#{$gen}/#{@ct_name}.cdl\" );\n"
+
+=begin
+    # TODO: send. receive 対応
+    send_receive = []
+    if @signature != nil then
+      @signature.each_param{ |fd,param|
+        dir =param.get_direction
+        case dir
+        when :SEND, :RECEIVE
+          send_receive << [ dir, fd, param ]
+        end
+      }
+    end
+=end
+
+=begin
+composite #{@ct_name} {
+    entry #{@signature.get_name} #{@entry_port_name};
+    call #{@signature.get_name} #{@call_port_name};
+
+    cell #{@ct_name}Client #{@cell_name}Client{
+    };
+
+    [active]
+    cell #{@ct_name}Server #{@cell_name}Server{
+        #{@call_port_name} => composite.#{@call_port_name};
+    };
+
+    composite.#{@entry_port_name} => #{@cell_name}.#{@entry_port_name};
+};
+=end
+
+  end
+
+  #===  through cell コードを生成
+  #
+  #
+  def gen_through_cell_code( file )
+
+    # 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 */
+#{nest_str}  //  Client Side Channel
+#{nest_str}  cell #{@ct_name} #{@cell_name}{
+#{nest_str}  };
+
+EOT
+
+    @start_region.gen_region_str_post file
+    file.print "\n\n"
+
+    ##### サーバー側のセルの生成 #####
+    # print "######  #{@cell_name_body} ... #{@ct_name_body} #{@@generated_cell[ @ct_name_body ].class}  #####\n"
+
+    if @@generated_cell[ @ct_name_body ] then
+      file.print "/* cell #{@ct_name_body} #{@@generated_cell[ @ct_name_body ]}: already generated. */\n"
+    else
+      @@generated_cell[ @ct_name_body ] = @cell_name_body
+      nest = @end_region.gen_region_str_pre file
+      nest_str = "  " * nest
+      if @next_cell_port_subscript then
+        subscript = '[' + @next_cell_port_subscript.to_s + ']'
+      else
+        subscript = ""
+      end
+
+      # サーバー側チャンネルの生成 
+      # 拡張サービスコール本体
+      file.print <<EOT
+
+/* HRPSVC0004 */
+#{nest_str}  //  Server Side Channel
+#{nest_str}  cell #{@ct_name_body} #{@cell_name_body}{
+#{nest_str}    #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
+#{nest_str}  };
+EOT
+
+      @end_region.gen_region_str_post file
+
+      file2 = AppFile.open( "#{$gen}/tecsgen.cfg" )
+      file2.print "\n/* Generated by HRPSVCPlugin */\n\n"
+      file2.print <<EOT
+/* HRPSVC0005 */
+#include "#{@ct_name_body}_factory.h"
+EOT
+      file2.close
+
+      # callee_cell のget_restricted_regions を呼び出しておく
+      # restrict が参照された印をつけるため
+      @callee_cell.get_restricted_regions( :dummy_entry_name, :dummy_func_name )
+    end
+  end
+
+  #===  受け口関数の本体(C言語)を生成する
+  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
+  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
+  #file::           FILE        出力先ファイル
+  #b_singleton::    bool        true if singleton
+  #ct_name::        Symbol
+  #global_ct_name:: string
+  #sig_name::       string
+  #ep_name::        string
+  #func_name::      string
+  #func_global_name:: string
+  #func_type::      class derived from Type
+  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 )
+        # puts "generate ep_func for #{ct_name}"
+
+        #
+        #  拡張サービスコール呼出し側の関数生成
+        #
+        #  完成形のイメージ
+        #  
+        # ER_UINT
+        # eThroughEntry_write(CELLIDX idx, const char* buffer, uint_t length)
+        # {
+        #   ER_UINT  retval;
+        #   tHRPSVCPlugin_<Sig>SVCCaller_<Cell>_<Entry>_CB    *p_cellcb;
+        #   if( VALID_IDX( idx ) ){
+        #       p_cellcb = tHRPSVCPlugin_<Sig>SVCBody_<Cell>_<Entry>_GET_CELLCB(idx);
+        #   }else{
+        #       /* エラー処理コードをここに記述 */
+        #   }
+        # 
+        #   retval = (ER_UINT)cal_svc( TFN_TECSGEN_ORIGIN + svcid, 
+        #                              (intptr_t)par1, (intptr_t)par2, 0, 0, 0 );
+        #
+        #   return retval;
+        # }
+
+        if ! func_type.get_type.kind_of?( VoidType ) then
+            file.print( "  #{func_type.get_type_str}  retval;\n" )
+        end
+
+        # p "celltype_name, sig_name, func_name, func_global_name"
+        # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}"
+
+        delim = ""
+        if ! func_type.get_type.kind_of?( VoidType ) then
+            file.print( "  retval = (#{func_type.get_type_str})" )
+        else
+            file.print( "  " )
+        end
+
+        #file.print( "#{@call_port_name}_#{func_name}(" )
+        SVCManage.set_func_id( "#{@ct_name_body}_#{func_name}" )
+        svcid = SVCManage.get_func_id( "#{@ct_name_body}_#{func_name}" )
+        #file.print( "cal_svc( #{@ct_name_body}_#{func_name}" )
+        file.print( "cal_svc( TFN_TECSGEN_ORIGIN + #{svcid.to_s}" )
+
+        #    if ( ! b_singleton ) then
+        #      file.print( " tecs_this" )
+        #      delim = ","
+        #    end
+
+        i = 0
+        passed_param = {}
+        params.each{ |param|
+            delim = ","
+            file.printf( "#{delim} (intptr_t)#{param.get_name}" )
+            passed_param[i] = param.get_name
+            i += 1
+        }
+
+        while(i < NUM_SVC_ARG_MAX) do
+            delim = ","
+            file.printf( "#{delim} 0" )
+            passed_param[i] = "par#{i+1}"
+            i += 1
+        end
+
+        file.print( " );\n\n" )
+
+        if ! func_type.get_type.kind_of?( VoidType ) then
+            file.print( "  return retval;\n" )
+        end
+
+        #
+        #  拡張サービスコール本体側の関数生成
+        #
+        #  完成形のイメージ
+        #  
+        # ER_UINT
+        # eThroughEntry_write(CELLIDX idx, const char* buffer, uint_t length)
+        # {
+        #   ER_UINT  retval;
+        #   tHRPSVCPlugin_<Sig>SVCBody_<Cell>_<Entry>_CB    *p_cellcb;
+        #   if( VALID_IDX( idx ) ){
+        #       p_cellcb = tHRPSVCPlugin_<Sig>SVCBody_<Cell>_<Entry>_GET_CELLCB(idx);
+        #   }else{
+        #       /* エラー処理コードをここに記述 */
+        #   }
+        # 
+        #   retval = (ER_UINT)cal_svc( TFN_TECSGEN_ORIGIN + svcid, 
+        #                              (intptr_t)par1, (intptr_t)par2, 0, 0, 0 );
+        #
+        #   return retval;
+        # }
+            file2 = AppFile.open( "#{$gen}/#{@ct_name_body}.c" )
+            if @b_printed_include_stdint == false then
+              file2.print <<EOT
+#ifndef SIZE_MAX
+#define  SIZE_MAX   (~0UL)
+#endif
+
+EOT
+              @b_printed_include_stdint = true
+            end
+
+            if func_type.get_type.kind_of?( VoidType ) then
+                retval_assign = ""
+            else
+                retval_assign = "retval = (ER_UINT)"
+            end
+
+            file2.print <<EOT
+/* HRPSVC0006 */
+ER_UINT
+#{@ct_name_body}_#{func_name}(intptr_t #{passed_param[0]}, intptr_t #{passed_param[1]}, intptr_t #{passed_param[2]}, intptr_t #{passed_param[3]}, intptr_t #{passed_param[4]}, ID cdmid)
+{
+    ER_UINT retval = E_OK;
+
+EOT
+
+            # 
+            #  エラーチェック処理の生成
+            #
+
+            # 
+            #  呼出し元ドメインのチェック
+            #   * private method: gen_caller_check_code参照
+            #
+            generated_check_code = gen_caller_check_code(func_name)
+            check_code = generated_check_code["check_code"]
+            user_cannot_callable = generated_check_code["user_cannot_callable"]
+
+            # 
+            #  パラメータにポインタが存在する場合，呼出し元タスクに対する
+            #  アクセス権のチェック処理を出力する
+            #  ※ cdmidがカーネルドメイン(拡張サービスコール呼出し中のユーザ
+            #    ドメインを含む)であればprb_memの処理をスキップし，初段の
+            #    拡張サービスコールのみprb_memを呼出し元タスクに発行する
+            #
+            num = 0
+            params.each{ |param|
+                if param.get_declarator.get_ptr_level > 0 then
+                    align_check_str = "!ALIGN_TYPE(#{passed_param[num]}, #{param.get_type.get_referto.get_type_str}) || "
+                  
+                    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 (無符号含む)
+                        #
+                        #  charデータの場合，ALIGN_TYPEは必ずTRUE
+                        #  となるので，エラーチェックを省略
+                        #  char型の@bit_sizeは-11
+                        #  tecsgen/tecslib/core/types.rbを参照
+                        #
+                          align_check_str = ""
+                        end
+                    end
+                    if param.get_direction == :IN then
+                        #
+                        #  入力([in])のポインタパラメータは，呼出し元タスクに
+                        #  TPM_READ(読出し可能)のアクセス権が必要
+                        #
+                        # 二重ポインタが不可のため、size_is と string が同時に設定されることはない
+                        prb_func = "prb_mem"
+                        if param.get_size then
+                          size_str = param.get_size.to_s
+                        elsif param.get_string == -1 then
+                          size_str = "SIZE_MAX"
+                          prb_func = "prb_str"
+                        elsif param.get_string then
+                          size_str = param.get_string.to_s
+                          prb_func = "prb_str"
+                        else
+                          size_str = "1"
+                        end
+                        check_code.concat <<EOT
+        /* HRPSVC0007 */
+        if (#{align_check_str}#{prb_func}((void *)#{passed_param[num]}, sizeof(#{param.get_type.get_referto.get_type_str}) * (#{size_str}), TSK_SELF, TPM_READ) != E_OK) {
+            return E_MACV;
+        }
+EOT
+
+                    elsif param.get_direction == :OUT || param.get_direction == :INOUT then
+                        #
+                        #  出力([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 はない
+                          size_str = param.get_string.to_s
+                          # prb_func = "prb_str"             # out, inout の場合、必ず領域を確保する. prb_mem を用いる
+                        else
+                          size_str = "1"
+                        end
+                        check_code.concat <<EOT
+        /* HRPSVC0008 */
+        if (#{align_check_str}#{prb_func}((void *)#{passed_param[num]}, sizeof(#{param.get_type.get_referto.get_type_str}) * (#{size_str}), TSK_SELF, TPM_WRITE) != E_OK) {
+            return E_MACV;
+        }
+EOT
+
+                    end
+                end
+                num += 1
+            }
+
+            # 
+            #  呼出し元がカーネルドメインのみ許可されている場合，
+            #  すべてのユーザドメインからの呼出しに対し，E_OACVを返す
+            #
+            if user_cannot_callable
+                check_code = "\t\treturn E_OACV;"
+            end
+
+            if check_code != ""
+                # 
+                #  呼出し元がカーネルドメインの場合，アクセス権のチェック
+                #  処理をスキップさせる
+                #
+                file2.print <<eot
+    if (cdmid != TDOM_KERNEL) {
+#{check_code}
+    }
+eot
+            end
+
+            # 
+            #  拡張サービスコール本体(本来の受け口関数)を呼び出す
+            #
+            file2.print"    #{retval_assign}#{@call_port_name}_#{func_name}("
+
+            delim = ""
+            num = 0
+            params.each{ |param|
+                file2.print "#{delim}"
+                delim = ", "
+                file2.print "(#{param.get_type.get_type_str})"
+                file2.print passed_param[num]
+                file2.print param.get_type.get_type_str_post
+                num += 1
+            }
+
+            file2.print ");\n"
+
+            file2.print "\n    return retval;\n"
+            file2.print "}\n\n"
+
+            file2.close
+
+            # 
+            #  拡張サービスコールの登録
+            #
+            file2 = AppFile.open( "#{$gen}/tecsgen.cfg" )
+            file2.print "\n/* Generated by HRPSVCPlugin */\n\n"
+            file2.print <<EOT
+/* HRPSVC0009 */
+KERNEL_DOMAIN{
+    DEF_SVC( TFN_TECSGEN_ORIGIN + #{svcid.to_s}, { TA_NULL, #{@ct_name_body}_#{func_name}, SSZ_#{func_global_name} } );
+}
+EOT
+            file2.close
+
+            # 
+            #  拡張サービスコール登録に必要な情報をヘッダに出力
+            #   - 拡張サービスコール呼出し時のチェックで使用するスタックサイズを出力
+            #   - 拡張サービスコールとして登録する関数名のextern宣言を出力
+            #
+            file2 = AppFile.open( "#{$gen}/#{@ct_name_body}_factory.h" )
+            file2.print "\n/* Generated by HRPSVCPlugin */\n\n"
+            file2.print <<EOT
+/* HRPSVC0010 */
+#ifndef SSZ_#{func_global_name}
+#define SSZ_#{func_global_name}	DefaultExtsvcStackSize
+#endif /* SSZ_#{func_global_name} */
+
+/* HRPSVC0011 */
+extern ER_UINT #{@ct_name_body}_#{func_name}(intptr_t par1, intptr_t par2, intptr_t par3, intptr_t par4, intptr_t par5, ID cdmid);
+EOT
+            file2.close
+  end
+
+  def get_callee_cell
+      return @callee_cell
+  end
+
+  def get_caller_cell
+      return @caller_cell
+  end
+
+  def get_callee_ep_name
+      return @join.get_port_name
+  end
+
+  private
+  # 
+  #  拡張サービスコール本体における，呼出し元チェックのコードを
+  #  出力する
+  #  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 = ""
+      user_cannot_callable = false
+      all_domain_callable = false
+      caller_unrestricted = false
+
+      # 
+      #  呼出し元ドメインのチェック処理
+      #  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 に従う
+              # if svcplugin.get_caller_cell.get_celltype.is_active?
+              #    #
+              #    #  無所属かつactiveなセルは、TECSから存在が認識されていないのを
+              #    #  含む任意のドメインから呼び出される可能性も存在する
+              #    #
+              #    caller_unrestricted = true
+              # else
+              #     # 
+              #     #  無所属から接続されている場合は，すべてのセルの
+              #     #  restrictをチェック
+              #     #
+              #     Cell.get_cell_list2.each { |cell|
+              #         if cell.callable?(svcplugin.get_callee_cell, svcplugin.get_callee_ep_name, func_name)
+              #             callable_domains << cell.get_region.get_domain_root
+              #         end
+              #     }
+              #     print "callable_domains: "
+              #     callable_domains.each{ |dm| print dm.get_name, " " }
+              #     print "\n"
+              # end
+
+              # restrict 指定がある場合には、それに従う。さもなければ、チェックしない
+              callable_domains = @callee_cell.get_restricted_regions( get_callee_ep_name, func_name )
+              if callable_domains == nil then
+                caller_unrestricted = true
+              end
+              #  print "restrict_list: "
+              #  delim = ""
+              #  callable_domains.each{ |domain|
+              #    print delim, domain
+              #    delim = ", "
+              #  }
+              #  print "\n"
+
+          elsif svcplugin.get_caller_cell.callable?( svcplugin.get_callee_cell, svcplugin.get_callee_ep_name, func_name )
+              # 
+              #  特定のドメインから接続されている場合は，呼出し元セルの
+              #  restrictをチェック
+              #
+              callable_domains << svcplugin.get_caller_cell.get_region.get_domain_root
+          else
+              # 
+              #  無所属から結合されておらず，特定の呼出し元ドメインにアクセス権
+              #  がない場合，callable_domainsは空となる
+              #
+              # pp "#{svcplugin.get_caller_cell.get_name} cannot call #{svcplugin.get_callee_cell.get_name}_#{svcplugin.get_callee_ep_name}_#{func_name}"
+          end
+      }
+
+      if caller_unrestricted
+          # pp "caller_unrestricted: #{@ct_name_body}"
+          return {"check_code"=>"", "user_cannot_callable"=>false}
+      end
+
+      # 
+      #  重複を削除
+      #
+      callable_domains.uniq!
+      # 
+      #  無所属に対するドメインチェックは実施しない
+      #  カーネルドメインに対するドメインチェックは実施しない
+      #
+      callable_domains = callable_domains.select { |domain|
+          ((domain.get_domain_type.get_option != "OutOfDomain") && \
+           (domain.get_domain_type.get_option != "kernel"))
+      }
+      # pp "callable_domains"
+      # pp callable_domains.map{|domain| domain.get_name }
+      # 
+      #  すべてのユーザドメインから呼出し可能な場合，ドメインチェックは
+      #  実施しない
+      #
+      all_domain_regions = DomainType.get_domain_regions[:HRP].select { |reg|
+          ((reg.get_domain_type.get_option != "OutOfDomain") && \
+           (reg.get_domain_type.get_option != "kernel"))
+
+      }
+      # pp "all domains"
+      # pp all_domain_regions.map {|reg| reg.get_name}
+      if all_domain_regions.all? {|reg| callable_domains.include?(reg)}
+          all_domain_callable = true
+      end
+
+      # 
+      #  呼出し元ドメインのチェック処理本体の生成
+      #
+      if callable_domains.length == 0
+        dbgPrint "callable_domain.length = 0\n"
+          # 
+          #  ユーザドメインから呼出し不可能な場合は
+          #  個別のエラーチェックはせず，問答無用でE_OACVを返す
+          #
+          user_cannot_callable = true
+      elsif callable_domains.length == 1
+        dbgPrint "callable_domain.length = 1\n"
+          # 
+          #  呼出し可能なユーザドメインが単一の場合は
+          #  cdmid != <domain名> の形式でチェックする
+          #
+          check_code += "\t/* HRPSVC0012.1 */\n"
+          check_code += "\tif (cdmid != #{callable_domains[0].get_name}) {\n"
+      elsif callable_domains.length > 1 && !all_domain_callable
+        dbgPrint "callable_domain.length > 1 && not all_domains \n"
+          # 
+          #  呼出し可能なユーザドメインが複数の場合は
+          #  TACP(cdmid) & (TACP(<domain名>) | ...) != 0U
+          #  の形式でチェックする
+          #
+          check_code += "\t/* HRPSVC0012.2 */\n"
+          check_code += "\tif((TACP(cdmid) & ("
+          check_code += (callable_domains.map { |domain| "TACP(#{domain.get_name})"}).join("|")
+          check_code += ")) != 0U) {\n"
+      else
+        dbgPrint "callable_all_domains\n"
+      end
+      if check_code != ""
+          # 
+          #  呼出し可能なユーザドメインのチェックがある場合は
+          #  エラーコードを返すためのコードを出力する
+          #
+          check_code += <<EOS
+            /* HRPSVC0013 */
+            return E_OACV;
+        }
+EOS
+      end
+
+      return {"check_code"=>check_code, "user_cannot_callable"=>user_cannot_callable}
+  end
+
+  #---------------------------------------------------------#
+  #=== シグニチャのチェック
+  def check_signature signature
+    signature.get_function_head_array.each{ |fh|
+      type = fh.get_return_type
+      check_return_type signature, fh, type
+      if fh.get_paramlist.get_items.length > NUM_SVC_ARG_MAX then
+        cdl_error( "HSV0005 $1.$2: # of parameter more than #{NUM_SVC_ARG_MAX}", signature.get_name, fh.get_name )
+      end
+      fh.get_paramlist.get_items.each{ |param|
+        check_param signature, fh, param
+      }
+    }
+  end
+  #=== 戻り値の型のチェック
+  # ER, ER_UINT は推奨される型
+  # 整数、ブール、void は可能、他は不可
+  def check_return_type signature, fh, type
+    ot = type.get_original_type
+    if( type.get_type_str == "ER" || type.get_type_str == "ER_UINT" ) then
+      # OK!
+    elsif ot.kind_of?( IntType ) || ot.kind_of?( VoidType ) || ot.kind_of?( BoolType ) then
+      cdl_warning( "HSW0001 $1.$2: $3 return type cannot get access violation error", signature.get_name, fh.get_name, type.get_type_str.downcase )
+      check_intptr "#{signature.get_name}.#{fh.get_name} return type", type
+    else
+      cdl_error( "HSV0001 $1.$2 return type $3 cannot be used", signature.get_name, fh.get_name, type.get_type_str.to_s+type.get_type_str_post.to_s )
+    end
+  end
+  #=== 引数の型のチェック
+  def check_param signature, fh, param
+    type = param.get_type
+    ot = type.get_original_type
+    dir = param.get_direction
+    case dir
+    when :IN
+      if ot.kind_of?( IntType ) || ot.kind_of?( BoolType ) then
+        # OK!
+        check_intptr "#{signature.get_name}.#{fh.get_name}.#{param.get_name}", type
+      elsif ot.kind_of? PtrType then
+        check_ptr signature, fh, param, dir
+      else
+        cdl_error( "HSV0002 $1.$2.$3 $4 param type cannot be used", signature.get_name, fh.get_name, param.get_name, type.get_type_str.to_s+type.get_type_str_post.to_s )
+      end
+    when :OUT, :INOUT
+      if ot.kind_of? PtrType then
+        check_ptr signature, fh, param, dir
+      else
+        # error
+      end
+    when :SEND, :RECEIVE
+      cdl_error( "HSV0008 $1.$2.$3 param direction '$4' cannot be used", signature.get_name, fh.get_name, param.get_name, param.get_direction.to_s.downcase )
+    end
+  end
+  def check_ptr signature, fh, param, dir
+    type = param.get_type.get_referto
+    ot = type.get_original_type
+    if ot.kind_of?( IntType ) || ot.kind_of?( BoolType ) || ot.kind_of?( FloatType ) then
+      # OK!
+      check_intptr "#{signature.get_name}.#{fh.get_name}.#{param.get_name}", type
+    elsif ot.kind_of? PtrType then
+      cdl_error( "HSV0003 $1.$2.$3 multi-pointer type cannot be used", signature.get_name, fh.get_name, param.get_name, type.get_type_str.to_s+type.get_type_str_post.to_s )
+    elsif  ot.kind_of? StructType then
+      check_struct signature, fh, param
+    else
+      cdl_error( "HSV0004 $1.$2.$3 $4 type cannot be used", signature.get_name, fh.get_name, param.get_name, type.get_type_str.to_s+type.get_type_str_post.to_s )
+    end
+    if ( dir == :OUT || dir == :INOUT) && param.get_string == -1 then
+      cdl_error( "HSV0009 $1.$2.$3 string argment is necessary for out/inout parameter", signature.get_name, fh.get_name, param.get_name )
+    end
+  end
+  def check_struct signature, fh, param
+    type = param.get_type.get_referto
+    ot = type.get_original_type
+    ot.get_members_decl.get_items.each{ |decl|
+      type = decl.get_type
+      ot = type.get_original_type
+      if ot.kind_of?( IntType ) || ot.kind_of?( BoolType ) || ot.kind_of?( FloatType ) then
+        # OK!
+        check_intptr "#{signature.get_name}.#{fh.get_name}.#{param.get_name}.#{decl.get_name} member", type
+      else
+        dbgPrint "struct member #{decl.get_name} #{type} #{decl.get_type} #{decl.get_type.get_original_type}\n"
+        if( decl.get_type.get_original_type.kind_of? ArrayType ) then
+          dbgPrint "member array type #{decl.get_type.get_original_type.get_type} #{decl.get_type.get_original_type.get_type.get_original_type}\n"
+          check_struct_member_array signature, fh, param, decl
+        else
+          cdl_error( "HSV0006 $1.$2.$3 $4 type cannot be used as struct member", signature.get_name, fh.get_name, param.get_name, type.get_type_str.to_s+type.get_type_str_post.to_s )
+        end
+      end
+    }
+  end
+  def check_struct_member_array signature, fh, param, member_decl
+    # p "check_struct_member_array: #{member_decl.get_type.get_type_str}"
+    type = member_decl.get_type.get_type
+    ot = type.get_original_type
+    if ot.kind_of?( IntType ) || ot.kind_of?( BoolType ) || ot.kind_of?( FloatType ) then
+      # OK!
+      check_intptr "#{signature.get_name}.#{fh.get_name}.#{param.get_name}.#{member_decl.get_name} member", type
+    else
+      cdl_error( "HSV0007 $1.$2.$3 $4 type cannot be used as struct member", signature.get_name, fh.get_name, param.get_name, type.get_type_str.to_s+type.get_type_str_post )
+    end
+  end
+  def check_intptr msg, type
+    dbgPrint "check_intptr IN\n"
+    t = type
+    while( t.kind_of? DefinedType )
+      dbgPrint "check_intptr #{msg} #{t.get_type_str} #{t.get_original_type.get_type_str}\n"
+      tstr = t.get_type_str
+      tstr.sub!( /const /, "" )
+      tstr.sub!( /volatile /, "" )
+      if tstr == "intptr_t" || tstr == "uintptr_t" then
+        cdl_info( "HSI0001 $1 type '$2' not checked by plugin", msg, type.get_type_str )
+      end
+      t = t.get_type
+    end
+  end
+end
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPTaskPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPTaskPlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPTaskPlugin.rb	(revision 374)
@@ -0,0 +1,109 @@
+# coding: utf-8
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2018 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#  $Id$
+#++
+
+require_tecsgen_lib "HRPKernelObjectPlugin.rb"
+require_tecsgen_lib "HRPKernelObjectManager.rb"
+#== celltype プラグインの共通の親クラス
+class HRPTaskPlugin < HRPKernelObjectPlugin
+    ##
+    # oyama: add to avoid Ruby exception in code generation phase.
+    def new_cell cell
+      region = cell.get_region
+      dbgPrint "HRPTaskCelltypePlugin new_cell=#{cell.get_name} region=#{region.get_name}\n"
+      domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
+      if domainOption == "OutOfDomain"
+        cdl_error( "HRP9999 HRP task '$1' must belong to a domain", cell.get_name )
+      end
+    end
+
+    # # ATT_MODを生成済みかどうか                   # 2017.8.27
+    # @@generate_memory_module = false
+
+    #
+    #  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$の代わり
+        cell_IDX = @celltype.get_name_array(cell)[7]
+        # CRE_TSKの生成
+        dbgPrint "assign task plugin\n"
+        domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
+        # if cell.get_region.get_region_type == :DOMAIN
+        if domainOption != "OutOfDomain"
+            if val[:systemStackSize] == "0"
+                # 
+                #  システムスタックの定義を省略
+                #
+                file.print <<EOT
+CRE_TSK(#{val[:id]}, { #{val[:attribute]}, #{cell_IDX}, tTask_start, #{val[:priority]}, #{val[:stackSize]}, NULL });
+EOT
+            else
+                # 
+                #  システムスタックの定義を追加
+                #
+                file.print <<EOT
+CRE_TSK(#{val[:id]}, { #{val[:attribute]}, #{cell_IDX}, tTask_start, #{val[:priority]}, #{val[:stackSize]}, NULL, #{val[:systemStackSize]}, NULL });
+EOT
+            end
+        else
+            #
+            #  無所属のタスクは存在してはならないため，エラーとする
+            #
+            raise "task #{val[:id]} must belong to a domain."
+        end
+    end
+
+    #
+    #  SAC_TSKの出力
+    #  file:: FILE:     出力先ファイル
+    #  val :: Hash {attr => string}:   カーネルオブジェクトの属性の解析結果
+    #  acv :: Hash {accessPatternx => string}:   アクセス許可ベクタ
+    #
+    def print_cfg_sac(file, val, acv)
+       # pp "SAC_TSK"
+       # pp val
+       file.puts "SAC_TSK(#{val[:id]}, { #{acv[:accessPattern1]}, #{acv[:accessPattern2]}, #{acv[:accessPattern3]}, #{acv[:accessPattern4]} });"
+    end
+end
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCellPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCellPlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCellPlugin.rb	(revision 374)
@@ -0,0 +1,267 @@
+# -*- coding: utf-8 -*-
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2017 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#   $Id$
+#++
+
+#== celltype プラグインの共通の親クラス
+class MrubyBridgeCellPlugin < CellPlugin
+
+  # プラグイン引数名 => Proc
+  MrubyBridgePluginArgProc = { 
+      "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
+      "exclude_port" => Proc.new { |obj,rhs| obj.set_exclude_port rhs },
+      "exclude_port_func" => Proc.new { |obj,rhs| obj.set_exclude_port_func rhs },
+      "auto_exclude" => Proc.new { |obj,rhs| obj.set_auto_exclude rhs },
+  }
+  @@b_gen_post_code_by_dependent = false  # true if gen_post_code is called by MrubyBridgeCelltypePlugin
+  @@cell_list = {}      # gen_cdl_file'ed list to avoid duplicate generation
+  @@signature_list = {}
+
+  require_tecsgen_lib( "MrubyBridgeSignaturePlugin.rb" )
+
+  #@exclude_port::[ String(port_name) ] : 
+  #@exclude_port_func::{ [ String(port_name) ] => [ String(func_name) ] } : 
+  #@port_list::{ String(port_name) => String(include/exclude=func_name) }  : all included port and opt_string
+
+  #=== CellPlugin# initialize
+  #cell::     Cell        セル（インスタンス）
+  # このメソッドは、セルの構文解析が終わったところで呼び出される
+  # この段階では意味解析が終わっていない
+  def initialize( cell, option )
+    dbgPrint "  #{self.class.name}: initialzie=#{cell.get_name} option=#{option}\n"
+    super
+    @cell = cell
+
+    # option
+    @b_ignoreUnsigned = false
+    @exclude_port = []
+    @exclude_port_func = {}
+    @b_auto_exclude = true     # auto_exclude = true by default 
+    MrubyBridgeSignaturePlugin.set_gen_post_code_by_dependent
+
+    @plugin_arg_str = CDLString.remove_dquote option
+    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
+    # @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
+    @plugin_arg_list = {}
+    dbgPrint "#{self.class.name}: initialzie: #{cell.get_name}\n"
+    @plugin_arg_check_proc_tab = MrubyBridgePluginArgProc
+    parse_plugin_arg
+
+    @port_list = {}         # set @port_list before return
+    ct = @cell.get_celltype
+    return if ct == nil     # error case
+
+    port_list = ct.get_port_list
+    if @exclude_port.length > 0 then
+      # この実装では、存在しない port を指定されてもチェックできない
+      # print "MRBBridgeCellPlugin: exclude list\n"
+      port_list.each{ |port|
+        if ! @exclude_port.include?( port.get_name.to_s ) then
+          # print "MRBBridgeCellPlugin: #{port.get_name} included\n"
+          @port_list[ port ] = ""
+        else
+          # print "MRBBridgeCellPlugin: #{port.get_name} excluded\n"
+        end
+      }
+    else
+      port_list.each{ |port|
+        @port_list[ port ] = ""
+      }
+    end
+
+    if @exclude_port_func.length > 0 then
+      @port_list.each{ |port, opt_str|
+        delim = ""
+        if @exclude_port_func.include?( port.get_name.to_s ) then
+          @exclude_port_func[ port.get_name.to_s ].each{ |func_name|
+            opt_str += delim + "exclude=" + func_name
+            delim = ","
+          }
+        end
+        @port_list[ port ] = opt_str
+      }
+    end
+  end
+
+  def gen_cdl_file file
+    dbgPrint "#{self.class.name}: gen_cdl_file: #{@cell.get_name}\n"
+
+    file.print <<EOT
+/* MrubyBridgeCellPlugin: generate for cell=#{@cell.get_name} */
+EOT
+
+    if @@cell_list[ @cell ] then
+      file.print <<EOT
+
+/*
+ * generate for #{@cell.get_name} duplicate and ignored.
+ * This might comes from generate for celltype.
+ */
+EOT
+      cdl_info( "MrubyBridgeCellPlugin: generate duplicate for cell '$1'", @cell.get_name )
+      return
+    end
+    @@cell_list[ @cell ] = @cell
+                
+    @port_list.each{ |port, opt_str|
+      next if port.get_signature == nil
+
+      case port.get_signature.get_context
+      when "task", "any"
+      else
+        next
+      end
+
+      if port.get_port_type == :ENTRY then
+        print "  MrubyBridgeCellPlugin: [cell.port] #{@cell.get_name}.#{port.get_name} => [mruby instance] TECS::T#{port.get_signature.get_name}.new( '#{@cell.get_name}#{port.get_name}Bridge' ) \n"
+        if @@signature_list[ port.get_signature ] == nil then
+          opt_str = "ignoreUnsigned=#{@b_ignoreUnsigned}, auto_exclude=#{@b_auto_exclude}, " + opt_str
+          # p "opt_str=#{opt_str}"
+
+          file.print <<EOT
+
+/* cell.port=#{@cell.get_name}.#{port.get_name} */
+generate( MrubyBridgePlugin, #{port.get_signature.get_namespace_path}, "#{opt_str}" );
+EOT
+          @@signature_list[ port.get_signature ] = true
+        end
+
+        # mikan option
+        nest = @cell.get_region.gen_region_str_pre file
+        nest_str = "  " * nest
+
+        file.print <<EOT
+#{nest_str}/* BridgeCell */
+#{nest_str}cell nMruby::t#{port.get_signature.get_name} #{@cell.get_name}#{port.get_name}Bridge {
+#{nest_str}    cTECS = #{@cell.get_namespace_path}.#{port.get_name};
+#{nest_str}};
+EOT
+        @cell.get_region.gen_region_str_post file
+      end
+    }
+  end
+
+  #=== 後ろの CDL コードを生成
+  #プラグインの後ろの CDL コードを生成
+  #file:: File: 
+  def self.gen_post_code( file )
+    dbgPrint "#{self.name}: gen_post_code\n"
+    if ! @@b_gen_post_code_by_dependent then
+      gen_post_code_body file
+    end
+  end
+
+  def self.set_gen_post_code_by_dependent # by MrubyBridgeCelltypePlugin
+    dbgPrint "#{self.name}: set_gen_post_code_by_dependent\n"
+    @@b_gen_post_code_by_dependent = true
+    MrubyBridgeSignaturePlugin.set_gen_post_code_by_dependent
+  end
+
+  def self.gen_post_code_body file
+    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
+    # file.print "/* '#{self.class.name}' post code */\n"
+    dbgPrint "#{self.name}: gen_post_code_body\n"
+    MrubyBridgeSignaturePlugin.gen_post_code_body file
+  end
+
+  #=== プラグイン引数 ignoreUnsigned
+  def set_ignoreUnsigned rhs
+    if rhs == "true" || rhs == nil then
+      @b_ignoreUnsigned = true
+    end
+  end
+
+  #=== プラグイン引数 exclude_port
+  def set_exclude_port rhs
+    ports = rhs.split ','
+    ct = @cell.get_celltype
+    return if ct == nil    # error case
+    ports.each{ |rhs_port|
+      obj = ct.find( rhs_port.to_sym )
+      if( ( ! obj.instance_of? Port ) || obj.get_port_type != :ENTRY ) then
+        cdl_error( "MRB9999 exclude_port '$1' not found or not entry in celltype '$2'", rhs_port, ct.get_name )
+      else
+        # print "MRBBridgeCellPlugin: exclude #{rhs_port}\n"
+        @exclude_port << rhs_port
+      end
+    }
+  end
+
+  #=== プラグイン引数 exclude_port_func
+  def set_exclude_port_func rhs
+    port_funcs = rhs.split ','
+    ct = @cell.get_celltype
+    return if ct == nil    # error case
+    port_funcs.each{ |rhs_port_func|
+      port_func = rhs_port_func.split '.'
+      if port_func.length != 2 then
+        cdl_error( "MRB9999 exclude_port_func: '$1' not in 'port.func' form", rhs_port_func )
+      end
+      obj = ct.find( port_func[0].to_sym )
+      if( ( ! obj.instance_of? Port ) || obj.get_port_type != :ENTRY ) then
+        cdl_error( "MRB9999 exclude_port_func: port '$1' not found in celltype '$2'", rhs_port, ct.get_name )
+      else
+        signature = obj.get_signature
+        next if signature == nil     # error case
+        if signature.get_function_head port_func[1].to_sym
+          # print "MRBBridgeCellPlugin: #{port_func[0]}.#{port_func[1]} exclude\n"
+          if @exclude_port_func[ port_func[0] ] then
+            @exclude_port_func[ port_func[0] ] <<  port_func[1]
+          else
+            @exclude_port_func[ port_func[0] ] = [ port_func[1] ]
+          end
+        else
+          cdl_error( "MRB9999 exclude_port_func: func '$1' not found in port '$2' celltype $3",
+                     port_func[1], port_func[0], ct.get_name )
+        end
+      end
+    }
+  end
+  #=== プラグイン引数 auto_exclude
+  def set_auto_exclude rhs
+    # print "MrubyBridgeCellPlugin: auto_exclude=#{rhs}\n"
+    if rhs == "false" then
+      @b_auto_exclude = false
+    elsif rhs == "true" then
+      @b_auto_exclude = true     # auto_exclude = true by default 
+    else
+      cdl_warning( "MRB9999 auto_exclude: unknown rhs value ignored. specify true or false" )
+    end
+  end
+
+end
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCelltypePlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCelltypePlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCelltypePlugin.rb	(revision 374)
@@ -0,0 +1,294 @@
+# -*- coding: utf-8 -*-
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2017 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#   $Id$
+#++
+
+require_tecsgen_lib 'tecslib/plugin/lib/MrubyBridgeCelltypePluginModule.rb'
+
+#== MrubyBridgeCompositePlugin
+class MrubyBridgeCelltypePlugin < CompositePlugin
+  dbgPrint "MrubyBridgeCelltypePlugin loaded\n"
+  include MrubyBridgeCelltypePluginModule
+
+  def self.gen_post_code( file )
+    MrubyBridgeCelltypePluginModule.gen_post_code file
+  end
+end
+
+
+#
+##== celltype プラグインの共通の親クラス
+#class MrubyBridgeCelltypePlugin < CelltypePlugin
+#
+#  # プラグイン引数名 => Proc
+#  MrubyBridgePluginArgProc = { 
+#      "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
+#      "include_inner_cell" => Proc.new { |obj,rhs| obj.set_include_inner_cell rhs },
+#      "exclude_cell" => Proc.new { |obj,rhs| obj.set_exclude_cell rhs },
+#      "exclude_port" => Proc.new { |obj,rhs| obj.set_exclude_port rhs },
+#      "exclude_port_func" => Proc.new { |obj,rhs| obj.set_exclude_port_func rhs },
+#      "auto_exclude" => Proc.new { |obj,rhs| obj.set_auto_exclude rhs },
+#  }
+#
+#  require_tecsgen_lib( "MrubyBridgeCellPlugin.rb" )
+#  @@plugin_list = []
+#  @@count = 1
+#
+#  #celltype::     Celltype        セルタイプ（インスタンス）
+#  def initialize( celltype, option )
+#    dbgPrint "#{self.class.name}: initialzie: #{celltype.get_name}\n"
+#
+#    super
+#    @celltype = celltype
+#    @cell_list = []
+#    @include_inner_cell = false
+#    @exclude_cells = []
+#    @exclude_port = []
+#    @exclude_port_func = {}
+#    @b_ignoreUnsigned = false
+#    @b_auto_exclude = true     # auto_exclude = true by default 
+#    @@plugin_list << self
+#
+#    @plugin_arg_check_proc_tab = MrubyBridgePluginArgProc
+#    @plugin_arg_str = CDLString.remove_dquote option
+#    parse_plugin_arg
+#
+#    MrubyBridgeCellPlugin.set_gen_post_code_by_dependent
+#  end
+#
+#  #=== 新しいセル
+#  #cell::        Cell            セル
+#  #
+#  # 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 以降のセルは対象から外す
+#      cdl_info( "I9999 MrubyBridgeCelltypePlugin: $1 is excluded because cell generated after post_coded", cell.get_name )
+#      return
+#    end
+#
+#    # include_inner_cell option
+#    if cell.is_cloned? && @include_inner_cell == false then
+#    #   p "#{cell.get_name} excluded"
+#      cdl_info( "I9999 MrubyBridgeCelltypePlugin: inner cell $1 is excluded", cell.get_name )
+#      return
+#    # else
+#    #   p "#{cell.get_name} included"
+#    end
+#
+#    # exclude_cell option
+#    if @exclude_cells.include?( cell.get_name ) then
+#      return
+#    end
+#
+#    opt_str = "ignoreUnsigned=#{@b_ignoreUnsigned}, auto_exclude=#{@b_auto_exclude}"
+#    @exclude_port.each{ |port|
+#      opt_str += ",exclude_port=#{port}"
+#    }
+#    @exclude_port_func.each{ |port, funcs|
+#      funcs.each{ |func|
+#        opt_str += ",exclude_port_func=#{port}.#{func}"
+#      }
+#    }
+#
+#    # p "MrubyBridgeCelltypePlugin: opt_str=#{opt_str}"
+#
+#    # mikan option, region
+#    fn2 = "#{$gen}/tmp_MrubyBridgeCelltypePlugin_#{@celltype.get_name}_#{@@count}.cdl"
+#    f2 = File.open( fn2, "w" )
+#    f2.print <<EOT
+#/* MrubyBridgeCelltypePlugin: celltype=#{@celltype.get_name} */
+#generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "#{opt_str}" );
+#EOT
+#    f2.close
+#    Import.new "#{fn2}"
+#    @@count += 1
+#  end
+#
+#### 意味解析段階で呼び出されるメソッド ###
+#  #===  CDL ファイルの生成
+#  #      typedef, signature, celltype, cell のコードを生成
+#  #      重複して生成してはならない
+#  #      すでに生成されている場合は出力しないこと。
+#  #      もしくは同名の import により、重複を避けること。
+#  #file::        FILE       生成するファイル
+#  def gen_cdl_file file
+##   この段階で呼びだすと generate 文が呼び出される前のセルのみの出力となる
+#    
+##    dbgPrint "MrubyBridgeCelltypePlugin: gen_cdl_file: #{@celltype.get_name}\n"
+##    file.print <<EOT
+##/* MrubyBridgeCelltypePlugin: celltype=#{@celltype.get_name}
+## *
+## *    cell's generate before celltype's generate
+## */
+##
+##EOT
+##    @celltype.get_cell_list.each { |cell|
+##      @cell_list << cell
+##      # mikan option, region
+##      dbgPrint "MrubyBridgeCelltypePlugin: cell=#{cell.get_name}\n"
+##      file.print <<EOT
+##generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "" );
+##EOT
+##    }
+#
+#  end
+#
+#  #=== tCelltype_factory.h に挿入するコードを生成する
+#  # file 以外の他のファイルにファクトリコードを生成してもよい
+#  # セルタイププラグインが指定されたセルタイプのみ呼び出される
+#  def gen_factory file
+#  end
+#
+#  def get_celltype
+#    @celltype
+#  end
+#
+#  #=== 後ろの 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 の初期化コードに反映されない
+#    
+##    # MrubyBridgeCelltypePlugin の生成する generate 文は、
+##    fn2 = "#{$gen}/tmp_MrubyBridgeCelltypePlugin_post.cdl"
+##    f2 = File.open( fn2, "w" )
+##    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
+##    dbgPrint "MrubyBridgeCelltypePlugin: gen_post_code\n"
+##    f2.print "/* '#{self.name}' post code */\n"
+##    @@plugin_list.each{ |plugin|
+##      plugin.get_celltype.get_cell_list.each{ |cell|
+##        # mikan option, region
+##        f2.print <<EOT
+##generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "" );
+##EOT
+##      }
+##    }
+##    f2.close
+##    p Import
+##    Import.new "#{fn2}"
+#
+#    MrubyBridgeCellPlugin.gen_post_code_body file
+#  end
+#
+#  #=== プラグイン引数 
+#
+#  #=== プラグイン引数 ignoreUnsigned
+#  def set_ignoreUnsigned rhs
+#    if rhs == "true" || rhs == nil then
+#      @b_ignoreUnsigned = true
+#    end
+#  end
+#
+#  def set_include_inner_cell rhs
+#    if rhs == "true" || rhs == nil then
+#      @include_inner_cell = true
+#    end
+#  end
+#
+#  def set_exclude_cell rhs
+#    cells = rhs.split ','
+#    cells.each{ |rhs_cell|
+#      rhs_cell.gsub!( /\s/, "" )
+#      @exclude_cells << rhs_cell.to_sym
+#    }
+#  end
+#  def set_exclude_port rhs
+#    ports = rhs.split ','
+#    ct = @cell.get_celltype
+#    return if ct == nil    # error case
+#    ports.each{ |rhs_port|
+#      obj = ct.find( rhs_port.to_sym )
+#      if( ( ! obj.instance_of? Port ) || obj.get_port_type != :ENTRY ) then
+#        cdl_error( "MRB9999 exclude_port '$1' not found or not entry in celltype '$2'", rhs_port, ct.get_name )
+#      else
+#        # print "MRBBridgeCellPlugin: exclude #{rhs_port}\n"
+#        @exclude_port << rhs_port
+#      end
+#    }
+#  end
+#
+#  #=== プラグイン引数 exclude_port_func
+#  def set_exclude_port_func rhs
+#    port_funcs = rhs.split ','
+#    ct = @celltype
+#    return if ct == nil    # error case
+#    port_funcs.each{ |rhs_port_func|
+#      port_func = rhs_port_func.split( '.' )
+#      if port_func.length != 2 then
+#        cdl_error( "MRB9999 exclude_port_func: '$1' not in 'port.func' form", rhs_port_func )
+#      end
+#      obj = ct.find( port_func[0].to_sym )
+#      if( ( ! obj.instance_of? Port ) || obj.get_port_type != :ENTRY ) then
+#        cdl_error( "MRB9999 exclude_port_func: port '$1' not found in celltype '$2'", rhs_port_func, ct.get_name )
+#      else
+#        signature = obj.get_signature
+#        next if signature == nil     # error case
+#        if signature.get_function_head port_func[1].to_sym
+#          # print "MRBBridgeCellPlugin: #{port_func[0]}.#{port_func[1]} exclude\n"
+#          if @exclude_port_func[ port_func[0] ] then
+#            @exclude_port_func[ port_func[0] ] <<  port_func[1]
+#          else
+#            @exclude_port_func[ port_func[0] ] = [ port_func[1] ]
+#          end
+#        else
+#          cdl_error( "MRB9999 include_port_func: func '$1' not found in port '$2' celltype $3",
+#                     port_func[1], port_func[0], ct.get_name )
+#        end
+#      end
+#    }
+#  end
+#
+#  #=== プラグイン引数 auto_exclude
+#  def set_auto_exclude rhs
+#    # print "MrubyBridgeCellPlugin: auto_exclude=#{rhs}\n"
+#    if rhs == "false" then
+#      @b_auto_exclude = false
+#    elsif rhs == "true" then
+#      @b_auto_exclude = true     # auto_exclude = true by default 
+#    else
+#      cdl_warning( "MRB9999 auto_exclude: unknown rhs value ignored. specify true or false" )
+#    end
+#  end
+#end
+#
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCompositePlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCompositePlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCompositePlugin.rb	(revision 374)
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2017 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#   $Id$
+#++
+
+require_tecsgen_lib 'tecslib/plugin/lib/MrubyBridgeCelltypePluginModule.rb'
+
+#== MrubyBridgeCompositePlugin
+class MrubyBridgeCompositePlugin < CompositePlugin
+  dbgPrint "MrubyBridgeCompositePlugin loaded\n"
+  include MrubyBridgeCelltypePluginModule
+
+  def self.gen_post_code( file )
+    MrubyBridgeCelltypePluginModule.gen_post_code file
+  end
+end
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgePlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgePlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgePlugin.rb	(revision 374)
@@ -3,5 +3,5 @@
 #  mruby => TECS bridge
 #  
-#   Copyright (C) 2008-2015 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeSignaturePlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeSignaturePlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeSignaturePlugin.rb	(revision 374)
@@ -0,0 +1,1313 @@
+# -*- coding: utf-8 -*-
+#
+#  mruby => TECS bridge
+#  
+#   Copyright (C) 2008-2017 by TOPPERS Project
+#
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#   $Id$
+#
+
+# Todo:
+# 生成するもの
+#  gen_cdl_file
+#    ブリッジ初期化セルタイプ (シグニチャごと)
+#       @@init_celltypes に記録
+#    ブリッジセルタイプ (シグニチャごと)
+#       @@celltypes に記録
+#    構造体セルタイプ
+#       @@struct_list に記録
+#  new_cell
+#    TECS 初期化セル(プロトタイプ宣言)
+#       @@VM_init_cells に記録
+#       @@VM_struct_list に記録
+#       @@VM_ptr_list に記録
+#  gen_post_code
+#    構造体初期化セル
+#    ポインタ初期化セル
+#    TECS 初期化セル
+#
+#   ep_func の作成
+#     signature, ポインタ、構造体 … 初期化受け口＝mruby VM への登録
+#     ポインタ
+#   preamble の作成
+#     ポインタ、構造体 … アクセス用コードの生成
+#     signature … ブリッジ関数のプロトタイプ宣言
+#   postamble の作成
+#     signature … ブリッジ関数の定義
+
+class MrubyBridgeSignaturePlugin < SignaturePlugin
+
+  # プラグイン引数名 => Proc
+  MrubyBridgePluginArgProc = { 
+      "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
+      "include" => Proc.new { |obj,rhs| obj.set_include rhs },
+      "exclude" => Proc.new { |obj,rhs| obj.set_exclude rhs },
+      "auto_exclude" => Proc.new { |obj,rhs| obj.set_auto_exclude rhs },
+  }
+
+  @@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 のインスタンスの配列 }
+  @@struct_list = { }           # {struct_name=>StructType}
+  @@ptr_list = { }              # {ptr_celltype_name=> @@TYPE_MAP の対応するもの}
+  @@VM_list = { }               # VM_name => true
+  @@VM_celltypes = {  }             # VM_name => { @celltype_name => セルの配列 }
+  @@VM_struct_list = { }           # {name=>StructType}
+  @@VM_ptr_list = { }              # { VM_name => {name=> @@TYPE_MAP の対応するもの} }
+  @@TYPE_MAP = {           # type_str   class             GET_SET
+    :char_t            => [:char_t,    "Char",     :Char,  :INT   ],
+    :uchar_t           => [:uchar_t,   "UChar",    :Char,  :INT   ],
+    :schar_t           => [:schar_t,   "SChar",    :Char,  :INT   ],
+
+    :bool_t            => [:bool_t,    "Bool",     :Bool,  :BOOL  ],
+    :int8_t            => [:int8_t,    "Int8",     :Int,   :INT   ],
+    :int16_t           => [:int16_t,   "Int16",    :Int,   :INT   ],
+    :int32_t           => [:int32_t,   "Int32",    :Int,   :INT   ],
+    :int64_t           => [:int64_t,   "Int64",    :Int,   :INT   ],
+    :uint8_t           => [:uint8_t,   "UInt8",    :Int,   :INT   ],
+    :uint16_t          => [:uint16_t,  "UInt16",   :Int,   :INT   ],
+    :uint32_t          => [:uint32_t,  "UInt32",   :Int,   :INT   ],
+    :uint64_t          => [:uint64_t,  "UInt64",   :Int,   :INT   ],
+
+    :int               => [:int,       "Int",      :Int,  :INT   ], 
+    :char              => [:char,      "Char",     :Char, :INT   ],    # char は char_t として扱う
+    :short             => [:short,     "Short",    :Int,  :INT   ],
+    :long              => [:long,      "Long",     :Int,  :INT   ],
+
+    :"unsigned char"   => [:uchar_t,   "UChar",         :Char, :INT   ],
+    :"unsigned int"    => [:"unsigned int",   "UInt",   :Int,  :INT   ],
+    :"unsigned short"  => [:"unsigned short", "UShort", :Int,  :INT   ],
+    :"unsigned long"   => [:"unsigned long",  "ULong",  :Int,  :INT   ],
+    :"signed char"     => [:schar_t,   "SChar",    :Char,  :INT   ],
+    :"signed int"      => [:int,       "Int",      :Int,   :INT   ],
+    :"signed short"    => [:short,     "Short",    :Int,   :INT   ],
+    :"signed long"     => [:long,      "Long",     :Int,   :INT   ],
+
+    :float32_t         => [:float32_t, "Float32",  :Float, :FLOAT ],
+    :double64_t        => [:double64_t,"Double64", :Float, :FLOAT ],
+
+    :float             => [:float,     "Float32",  :Float, :FLOAT ],
+    :double            => [:double,    "Double64", :Float, :FLOAT ]
+  }
+
+  # included  or excluded functions
+
+  ### ロードされた時点で実行される ###
+
+  # -I に $(TECSPATH)/mruby を追加
+  # TECSGEN::Makefile.add_obj "$(MRUBY_MAIN_OBJ)"
+  TECSGEN::Makefile.add_ldflag "-lmruby -L$(MRUBYPATH)/lib -lm"
+  TECSGEN::Makefile.add_search_path "$(MRUBYPATH)/include"
+  TECSGEN::Makefile.add_var "MRUBYPATH",      "..",  "CHANGE this to suitable path"
+  # TECSGEN::Makefile.add_var "MRUBY_MAIN_OBJ", "$(_TECS_OBJ_DIR)tecs_mruby.o", "CHANGE this if your have your main"
+
+  #=== プラグインインスタンスの初期化
+  # 戻り値、引数の型が使用可能なものかチェックする
+  #
+  def initialize( signature, option )
+    super
+
+    if ! @@b_no_banner
+      STDERR << "MrubyBridgePlugin: version 1.3.0 (Suitable for mruby ver 1.3.0 & ver 1.2.0). \n"
+      @@b_no_banner = true
+    end
+
+    @b_ignoreUnsigned = false
+    @includes = []
+    @excludes = []
+    @struct_list = { }
+    @ptr_list = { }
+    @auto_exclude_list = {}
+    @b_auto_exclude = true     # auto_exclude = true by default 
+
+    @plugin_arg_check_proc_tab = MrubyBridgePluginArgProc
+    parse_plugin_arg
+
+    @celltype_name = :"t#{@signature.get_global_name}"
+    @init_celltype_name = :"#{@celltype_name}_Initializer"
+        # this variable is sometimes not used. rhs coded directry.
+    @class_name = :"T#{@signature.get_global_name}"
+
+    @func_head_array = []
+    fh_array = []
+    if @includes.length > 0 && @excludes.length > 0 then
+      cdl_error( "MRB1011 both include && exclude are specified" )
+    end
+
+    if signature.get_function_head_array == nil then
+      return   # 以前に文法エラー発生
+    end
+
+    signature.get_function_head_array.each{ |func_head|
+      if @includes.length > 0 then
+        if @includes.index func_head.get_name then
+          dbgPrint "MrubyBridgePlugin: #{func_head.get_name} INCLUDED\n"
+          fh_array << func_head
+        else
+          dbgPrint "MrubyBridgePlugin: #{func_head.get_name} NOT included\n"
+        end
+      elsif @excludes.length > 0 then
+        if @excludes.index( func_head.get_name ) == nil then
+          dbgPrint "MrubyBridgePlugin: #{func_head.get_name} NOT excluded\n"
+          fh_array << func_head
+        else
+          dbgPrint "MrubyBridgePlugin: #{func_head.get_name} EXCLUDED\n"
+        end
+      else
+        fh_array << func_head
+      end
+    }
+
+    check_name_and_return_type fh_array
+    check_parameter_type fh_array
+
+    fh_array.each{ |fh|
+      if @auto_exclude_list[ fh.get_name ] == nil then
+        @func_head_array << fh
+      else
+        dbgPrint "MrubyBridgePlugin: auto_exclude #{fh.get_name}\n"
+      end
+    }
+
+    if @func_head_array.length == 0 then
+      cdl_error( "MRB1012 '$1' no function remained by exclude", @signature.get_name )
+    end
+  end
+
+  #=== check function name & return type
+  def check_name_and_return_type func_head_array
+    b_init = false; b_init_cell = false
+    func_head_array.each{ |func_head|
+      if( func_head.get_name == :initialize )then
+        cdl_warning( "MRW2001 initialize: internally defined. change to initialize_cell in ruby" )
+        b_init = true
+      elsif( func_head.get_name == :initialize_cell )then
+        b_init_cell = true
+      end
+      rtype = func_head.get_return_type.get_original_type
+      case rtype
+      when BoolType, IntType, FloatType, VoidType
+      else
+        if @b_auto_exclude then
+          cdl_info( "MRI0001 cannot return type $1, $2 automatcally excluded", rtype.get_type_str, func_head.get_name )
+          @auto_exclude_list[ func_head.get_name ] = func_head
+        else
+          cdl_error( "MRB1001 cannot return type $1", rtype.get_type_str )
+        end
+      end
+    }
+    if( b_init && b_init_cell )then
+      cdl_warning( "MRB1002 initialize: internally defined. change to initialize_cell in ruby" )
+    end
+  end
+
+  #=== check paramter type
+  def check_parameter_type func_head_array
+    # check type of parameters
+    func_head_array.each{ |fh|
+      fh.get_paramlist.get_items.each{ |param_decl|
+        case param_decl.get_direction
+        when :SEND, :RECEIVE
+          if @b_auto_exclude then
+            cdl_info( "MRI0002 $1: $2 parameter cannot be used in mruby Bridge, $3 automatcally excluded",
+                      param_decl.get_name, param_decl.get_direction.to_s.downcase, fh.get_name )
+            @auto_exclude_list[ fh.get_name ] = fh
+          else
+            cdl_error( "MRB1003 $1: $2 parameter cannot be used in mruby Bridge",  param_decl.get_name, param_decl.get_direction.to_s.downcase )
+          end
+        end
+        type = param_decl.get_type
+        type_org = type.get_original_type
+        type_str = type.get_type_str + type.get_type_str_post
+
+        b_ng = false
+        case type_org
+        when IntType
+          case  type_org.get_bit_size
+          when 8, 16, 32, 64
+          when -1, -2, -3, -4, -11
+          else
+            b_ng = true
+          end
+        when BoolType
+        when FloatType
+        when PtrType
+          ttype_org = type_org.get_type       # ポインタの指している先の型
+          ttype = ttype_org.get_original_type # 上記の typedef されている場合、元の型
+          register_ptr_type ttype_org, fh
+
+          if( type_org.get_string.to_s == "-1" ) then
+            case param_decl.get_direction
+            when :OUT, :INOUT
+              if @b_auto_exclude then
+                cdl_info( "MRB9999 string specifier without length cannot be used for out & inout parameter, $1 automatcally excluded", 
+                        fh.get_name )
+                @auto_exclude_list[ fh.get_name ] = fh
+              else
+                cdl_error( "MRB9999 string specifier without length cannot be used for out & inout parameter")
+              end
+            end
+          end
+
+          case ttype
+          when IntType
+            bit_size = ttype.get_bit_size
+            # if  bit_size < 0 && bit_size != -1 then
+            #   b_ng = true
+            # end
+          when FloatType
+          when BoolType
+          when StructType
+            if( type_org.get_size || type_org.get_string || type_org.get_count ) then
+              if @b_auto_exclude then
+                cdl_info( "MRI9999 $1: size_is, count_is, string cannot be specified for struct pointer, $2 automatcally excluded",
+                          param_decl.get_name, fh.get_name )
+                @auto_exclude_list[ fh.get_name ] = fh
+              else
+                cdl_error( "MRB1004 $1: size_is, count_is, string cannot be specified for struct pointer", param_decl.get_name )
+              end
+            end
+            check_struct_member ttype_org, fh
+          else
+            b_ng = true
+          end
+        when StructType
+          check_struct_member type_org, fh
+        else  # ArrayType, FuncType, EnumType, VoidType
+          b_ng = true
+        end
+        if b_ng then
+          if @b_auto_exclude then
+            cdl_info( "MRI9999 $1: type $2 cannot be used in mruby Bridge, $3 automatcally excluded",
+                      param_decl.get_name, type_str, fh.get_name )
+            @auto_exclude_list[ fh.get_name ] = fh
+          else
+            cdl_error( "MRB1005 $1: type $2 cannot be used in mruby Bridge", param_decl.get_name, type_str )
+          end
+        end
+      }
+    }
+  end
+
+  #=== 構造体のメンバーの型のチェック
+  def check_struct_member struct_type, fh
+    #p "tag name:#{struct_type.get_name}"
+    # sttype = Namespace.find_tag( struct_type.get_name )
+    sttype = struct_type.get_original_type
+    if sttype.get_name == nil then
+      if @b_auto_exclude then
+        cdl_info( "MRI9999 tagless-struct cannot be handled, $1 automatcally excluded", fh.get_name )
+        @auto_exclude_list[ fh.get_name ] = fh
+        return  # 登録しないように打ち切る
+      else
+        cdl_error( "MRB10007 tagless-struct cannot be handled")
+      end
+    end
+    sttype.get_members_decl.get_items.each { |d|
+      t = d.get_type.get_original_type
+      case t
+      when IntType, FloatType, BoolType
+      else
+        if @b_auto_exclude then
+          cdl_info( "MRI9999 $1: type $2 not allowed for struct member, $3 automatcally excluded",
+                    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  # 登録しないように打ち切る
+        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 )
+        end
+      end
+    }
+    st_name = :"t{}"
+    if @struct_list[ sttype.get_name ] == nil then
+      # print_msg "  MrubyBridgePlugin: [struct]   #{struct_type.get_type_str} => class TECS::Struct#{sttype.get_name}\n"
+      print "  MrubyBridgePlugin: [struct]   #{struct_type.get_type_str} => class TECS::Struct#{sttype.get_name}\n"
+      @struct_list[ sttype.get_name ] = sttype
+    end
+  end
+
+  def register_ptr_type ttype, fh
+    t_org = ttype.get_original_type
+    tment = get_type_map_ent t_org
+    if tment == nil then
+      return
+      # cdl_error( "MRB1008 unknown pointer type '$1'", ttype.get_type_str )
+    end
+    ptr_celltype_name = :"t#{tment[1]}Pointer"
+    if @@ptr_list[ ptr_celltype_name ] == nil then
+      # print_msg "  MrubyBridgePlugin: [pointer]  #{ttype.get_type_str}* => class TECS::#{tment[1]}Pointer\n"
+      print "  MrubyBridgePlugin: [pointer]  #{ttype.get_type_str}* => class TECS::#{tment[1]}Pointer\n"
+      @@ptr_list[ ptr_celltype_name ] = tment
+    end
+    if @ptr_list[ ptr_celltype_name ] == nil then
+      @ptr_list[ ptr_celltype_name ] = tment
+    end
+  end
+
+  def get_type_map_ent ttype
+    # structure type is registerd in check_struct_member
+    if ttype.kind_of? StructType
+      return
+    end
+    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 も無視
+    end
+    return @@TYPE_MAP[ tstr.to_sym ]
+  end
+
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell コードを生成
+  #file::        FILE       生成するファイル
+  def gen_cdl_file(file)
+
+    # ブリッジセルタイプの生成
+    if @@celltypes[ @celltype_name ] == nil then
+      @@celltypes[ @celltype_name ] = [ self ]
+      @@init_celltypes[ @init_celltype_name ] = true
+      print_msg <<EOT
+  MrubyBridgePlugin: [signature] #{@signature.get_namespace_path} => [celltype] nMruby::#{@celltype_name} => [class] TECS::#{@class_name}
+EOT
+
+      file.print <<EOT
+/*
+ * MrubyBridgeSignaturePlugin:
+ *     signature=#{@signature.get_namespace_path}
+ *
+ *   => celltype=nMruby::#{@celltype_name}
+ *      (bridge cell's celltype; generated in this file)
+ *      cell nMruby::#{@celltype_name} BridgeCellName { cTECS = CellName.eEntry; };
+ *        where eEntry's signature must be #{@signature.get_namespace_path}.
+ *      => class=TECS::#{@class_name}
+ *         (mruby's class; accessible from your script)
+ *          bridge = TECS::#{@class_name}.new("BridgeCellName")
+ */
+import( <mruby.cdl> );
+
+/****  Ruby => TECS Bridge Celltype (MBP500) ****/
+namespace nMruby{
+    // bridge celltype
+    [idx_is_id,active]   // not actually active, to avoid warning W1002, W1007
+    celltype #{@celltype_name} {
+        call #{@signature.get_namespace_path.to_s} cTECS;
+        attr {
+            [omit]
+            char_t *VMname = "VM";
+            [omit]
+            char_t *bridgeName = C_EXP( "$cell$" );
+        };
+    };
+    // bridge initializer celltype
+    celltype #{@init_celltype_name} {
+        entry sInitializeTECSBridge eInitialize;
+    };
+};
+EOT
+
+      # 構造体セルタイプの生成
+      @struct_list.each{ |name, sttype|
+        if @@struct_list[ name ] == nil then
+          file.print <<EOT
+namespace nMruby{
+    [singleton]
+    celltype #{name} {
+        entry sInitializeTECSBridge eInitialize;
+    };
+};
+EOT
+          @@struct_list[ name ] = sttype
+        end
+      }
+
+    else
+      cdl_info( "MRBW001 MrubyBridgePlugin: signature '$1' duplicate. ignored current one", @signature.get_namespace_path )
+      @@celltypes[ @celltype_name ] << self
+    end
+  end
+
+  #=== gen_cdl_file で定義したセルタイプに 新しいセルが定義された
+  # cell のセルタイプの名前は @celltype_name
+  def new_cell cell
+    if cell.get_celltype.get_name != @celltype_name then
+      return
+    end
+
+    join = cell.get_join_list.get_item :VMname
+    if join then
+      vm_name = CDLString.remove_dquote(join.get_rhs.to_s).to_sym
+    else
+      vm_name = :"VM"
+    end
+
+    if @@VM_list[ vm_name ] == nil then
+      @@VM_list[ vm_name ] = true
+
+      initializer_celltype_cdl = "#{$gen}/#{cell.get_name}Initializer.cdl"
+      file = CFile.open( initializer_celltype_cdl, "w" )
+
+      # TECS 初期化セル(プロトタイプ宣言)
+      print_msg "  MrubyBridgePlugin: join your VM's cInitialize to #{vm_name}_TECSInitializer.eInitialize\n"
+
+      file.print <<EOT
+
+  // prototype of TECSInitializer (MBP510)
+  cell nMruby::tTECSInitializer #{vm_name}_TECSInitializer;
+EOT
+      file.close
+
+      Generator.parse( initializer_celltype_cdl, self )
+    end
+
+    if @@VM_celltypes[ vm_name ] then
+      vma = @@VM_celltypes[ vm_name ]
+
+      if vma[ @celltype_name ] then
+        vma[ @celltype_name ] << cell
+      else
+        vma[ @celltype_name ] = [cell]
+        @@VM_celltypes[ vm_name ] = vma
+      end
+    else
+      vma = { }
+      vma[ @celltype_name ] = [cell]
+      @@VM_celltypes[ vm_name ] = vma
+    end
+
+    @struct_list.each{ |stname, sttype|
+      if @@VM_struct_list[ vm_name ] then
+        @@VM_struct_list[ vm_name ][ sttype.get_name ] = sttype
+      else
+        @@VM_struct_list[ vm_name ] = { sttype.get_name => sttype }
+      end
+    }
+    @ptr_list.each{ |ptr_celltype_name, tment|
+      if @@VM_ptr_list[ vm_name ] then
+        @@VM_ptr_list[ vm_name ][ ptr_celltype_name ] = tment
+      else
+        @@VM_ptr_list[ vm_name ] = { ptr_celltype_name => tment }
+      end
+    }
+
+  end
+
+  #=== プラグインが CDL の POST コードを生成
+  # tmp_plugin_post_code.cdl への出力
+  def self.gen_post_code file
+    dbgPrint "#{self.name}: gen_post_code\n"
+    if ! @@b_gen_post_code_by_dependent then
+      gen_post_code_body file
+    end
+  end
+
+  def self.set_gen_post_code_by_dependent # by MrubyBriddeCellPlugin
+    dbgPrint "#{self.name}: set_gen_post_code_by_dependent\n"
+    @@b_gen_post_code_by_dependent = true
+  end
+
+  def self.gen_post_code_body file
+    dbgPrint "#{self.name}: gen_post_code_body\n"
+
+#     file.print <<EOT
+# namespace nMruby {
+# EOT
+# 
+#     @@ptr_list.each{ |name,tment|
+#       file.print <<EOT
+# 
+#     // MBP600
+#     [singleton]
+#     celltype #{name} {
+#         entry  sInitializeTECSBridge eInitialize;
+#     };
+# EOT
+#     }
+# 
+#     file.print <<EOT
+# };
+# EOT
+
+# gen_post_code で生成した celltype は gen_ep_func が呼び出されない #847
+#    @@struct_list.each{ |name,sttype|
+#      file.print <<EOT
+#
+#    [singleton]
+#    celltype #{name} {
+#        entry  sInitializeTECSBridge eInitialize;
+#    };
+#EOT
+#    }
+
+    file.print "\n  // MrubyBridgeSignaturePlugin: MBP601\n"
+    @@VM_celltypes.each{ |vm_name, instance_list|
+      instance_list.each { |celltype_name, array|
+        cell = array[0]
+	if cell.get_celltype then
+	  ct_name = cell.get_celltype.get_name
+        file.print <<EOT
+  cell nMruby::#{ct_name}_Initializer #{vm_name}_#{ct_name}_Initializer{ };
+EOT
+        end
+      }
+    }
+
+    file.print "  // MBP602\n"
+    @@ptr_list.each{ |name,tment|
+      file.print <<EOT
+  cell nMruby::#{name} C#{name} { };
+EOT
+    }
+
+    file.print "  // MBP603\n"
+    @@struct_list.each{ |name,sttype|
+      file.print <<EOT
+  cell nMruby::#{name} C#{name} { };
+EOT
+    }
+
+    if @@VM_celltypes == nil
+      raise "MrubyBridgeSignaturePlugin: are0"
+    end
+    @@VM_celltypes.each{ |vm_name, instance_list|
+      file.print "  /* === VM name is '#{vm_name}' === (MBP610) */\n"
+      init_cell_name = "#{vm_name}_TECSInitializer"
+
+      file.print "  cell nMruby::tTECSInitializer #{init_cell_name} {\n"
+
+      instance_list.each { |celltype_name, array|
+#        array.each{ |cell|
+#          ct_name = cell.get_celltype.get_name
+          ct_name = celltype_name
+          file.print "    cInitialize[] = #{vm_name}_#{ct_name}_Initializer.eInitialize;\n"
+#        }
+      }
+      if @@VM_ptr_list[vm_name] then
+        @@VM_ptr_list[vm_name].each{ |name, tment|
+          file.print "    cInitialize[] = C#{name}.eInitialize;\n"
+        }
+      end
+      if @@VM_struct_list[vm_name] then
+        @@VM_struct_list[vm_name].each{ |name, sttype|
+          file.print "    cInitialize[] = C#{name}.eInitialize;\n"
+        }
+      end
+      file.print "  };"
+    }
+    
+  end
+
+  ####### 以下コード生成段階 ######
+
+  #===  受け口関数の本体コードを生成（頭部と末尾は別途出力）
+  #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
+      gen_ep_func_body_bridge( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
+    elsif @@init_celltypes[ ct_name ] then
+      gen_ep_func_body_bridge_init( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
+    elsif @@ptr_list[ ct_name ] then
+      gen_ep_func_body_ptr( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
+    elsif @@struct_list[ ct_name ] then
+      gen_ep_func_body_struct( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
+    else
+      raise "MrubyBridgeSignaturePlugin: Unknown #{ct_name}"
+    end
+  end
+
+  def gen_ep_func_body_bridge( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
+    raise "MrubyBridgeSignaturePlugin: unexpected "
+  end
+
+  def gen_ep_func_body_bridge_init( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
+    file.print <<EOT
+    // CELLCB *p_cellcb = GET_CELLCB( idx );  /* no error check */     /* MBP700 */
+    struct RClass	*rc;
+
+    rc = mrb_define_class_under( mrb, TECS, \"#{@class_name}\", mrb->object_class );
+    mrb_define_method( mrb, rc, "initialize", MrubyBridge_#{@celltype_name}_initialize, MRB_ARGS_REQ(1) );
+    MRB_SET_INSTANCE_TT(rc, MRB_TT_DATA);
+EOT
+
+    @func_head_array.each{ |f|
+      if ! f.is_function? then
+        next
+      end
+      if f.get_name != :initialize then
+        func_name = f.get_name
+      else
+        func_name = :initialize_cell
+      end
+
+      ret_type = f.get_return_type
+      n_param = 0
+      f.get_paramlist.get_items.each{ |param|
+        case param.get_direction
+        when :IN, :INOUT, :OUT
+          n_param += 1
+        when :SEND, :RECEIVE
+          raise "MrubyBridgeSignaturePlugin: send, receive"
+        end
+      }
+      if n_param > 0 then
+        p_str = "MRB_ARGS_REQ( #{n_param} )"
+      else
+        p_str = "MRB_ARGS_NONE()"
+      end
+      file.print <<EOT
+	mrb_define_method( mrb, rc, "#{func_name}", MrubyBridge_#{@celltype_name}_#{func_name}, #{p_str} );
+EOT
+    }
+  end
+
+  def gen_ep_func_body_ptr( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
+    
+    t = @@ptr_list[ct_name]
+    type = t[1]
+    file.print <<EOT
+	struct RClass *a;                                /* MBP710 */
+
+    a = mrb_define_class_under(mrb, TECS, "#{type}Pointer", mrb->object_class);
+    MRB_SET_INSTANCE_TT(a, MRB_TT_DATA);
+
+    mrb_define_method(mrb, a, "initialize",      #{type}Pointer_initialize,   MRB_ARGS_REQ(1));
+    mrb_define_method(mrb, a, "[]",              #{type}Pointer_aget,         MRB_ARGS_REQ(1));
+    mrb_define_method(mrb, a, "value",           #{type}Pointer_get_val,      MRB_ARGS_NONE());
+    mrb_define_method(mrb, a, "[]=",             #{type}Pointer_aset,         MRB_ARGS_REQ(2));
+    mrb_define_method(mrb, a, "value=",          #{type}Pointer_set_val,      MRB_ARGS_REQ(1));
+    mrb_define_method(mrb, a, "size",            #{type}Pointer_size,         MRB_ARGS_NONE());
+    mrb_define_method(mrb, a, "length",          #{type}Pointer_size,         MRB_ARGS_NONE());
+EOT
+
+    if t[2] == :Char then
+      file.print <<EOT
+	mrb_define_method(mrb, a, "to_s",            CharPointer_to_s, MRB_ARGS_NONE());
+	mrb_define_method(mrb, a, "from_s",          CharPointer_from_s, MRB_ARGS_REQ(1));
+EOT
+    end
+  end
+
+  def gen_ep_func_body_struct( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
+    tag = ct_name
+    structType = @@struct_list[ tag ]
+    file.print  <<EOT
+	struct RClass *a;                                /* MBP720 */
+
+	a = mrb_define_class_under(mrb, TECS, "Struct#{tag}", mrb->object_class);
+	MRB_SET_INSTANCE_TT(a, MRB_TT_DATA);
+
+	mrb_define_method(mrb, a, "initialize", Struct_#{tag}_initialize, MRB_ARGS_NONE());
+EOT
+
+      structType.get_members_decl.get_items.each{ |d|
+        file.print "  STRUCT_INIT_MEMBER( #{tag}, #{d.get_name} )\n"
+      }
+  end
+
+  #===  受け口関数の preamble (C言語)を生成する
+  #     必要なら preamble 部に出力する
+  #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 )
+    if @@celltypes[ ct_name ] then
+      gen_preamble_mruby( file, b_singleton, ct_name, global_ct_name )
+      gen_preamble_instance( file, b_singleton, ct_name, global_ct_name )
+      gen_preamble_instance_initialize( file, b_singleton, ct_name, global_ct_name )
+      gen_preamble_bridge_func( file, b_singleton, ct_name, global_ct_name )
+    elsif @@init_celltypes[ ct_name ] then
+      gen_preamble_mruby( file, b_singleton, ct_name, global_ct_name )
+      gen_preamble_instance_proto( file, b_singleton, ct_name, global_ct_name )
+    elsif @@ptr_list[ ct_name ] then
+      gen_preamble_ptr( file, b_singleton, ct_name, global_ct_name )
+    elsif @@struct_list[ ct_name ] then
+      gen_preamble_struct( file, b_singleton, ct_name, global_ct_name )
+    else
+      raise "MrubyBridgeSignaturePlugin: MrubyBridgeSignaturePlugin: Unknown #{ct_name}"
+    end
+  end
+
+  def gen_preamble_mruby( file, b_singleton, ct_name, global_ct_name )
+    file.print <<EOT
+/* MBP: MrubyBridgePlugin: MBP000 */
+#include "mruby.h"
+#include "mruby/class.h"
+#include "mruby/data.h"
+#include "mruby/string.h"
+#include "TECSPointer.h"
+#include "TECSStruct.h"
+
+#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+#define DLLEXPORT __declspec(dllexport)
+#else
+#define DLLEXPORT
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+EOT
+  end
+
+  def gen_preamble_instance( file, b_singleton, ct_name, global_ct_name )
+    # 「#1005  MrubyBridgePlugin-test のビルドに失敗」にて追加
+    # 「#1004 idx_is_id が true の場合(domain の場合は未指定でも true) の CBP のプロトタイプ宣言」にて不要になる見込み
+    nsp = NamespacePath.new( :nMruby, true )
+    nsp.append! ct_name
+    ct = Namespace.find nsp
+    if ct.idx_is_id_act? then
+      if ct.has_CB? then
+        inib_cb = "CB"
+      elsif ct.has_INIB? then
+        inib_cb = "INIB"
+      else
+        inib_cb = nil
+      end
+      if inib_cb then
+        ct.get_cell_list.each{ |cell|
+          if cell.is_generate? then
+            name_array = ct.get_name_array( cell )
+            file.print "extern #{ct.get_global_name}_CB  #{cell.get_global_name}_#{inib_cb};\n"
+          end
+        }
+      end
+    end
+
+    file.print <<EOT
+
+/* RData MBP001 */
+static void 
+#{@celltype_name}_free( mrb_state *mrb, void *p )
+{
+	if( p )
+		(void)mrb_free( mrb, p );
+}
+
+/* RData MBP002 */
+struct mrb_data_type data_type_#{@celltype_name} =
+{
+	"#{@celltype_name}",
+	#{@celltype_name}_free
+};
+
+/* RData MBP003 */
+struct tecs_#{@celltype_name} {
+    CELLCB  *cbp;
+};
+
+/* name_to_cbp MBP010 */
+const struct name_to_cbp_#{@celltype_name} {
+    char   *name;    /* Cell Name */
+    CELLCB *cbp;
+} Name_to_cbp_#{@celltype_name}[] = {
+EOT
+
+    nsp = NamespacePath.new( :nMruby, true )
+    nsp.append! ct_name
+    ct = Namespace.find nsp
+
+    ct.get_cell_list.each{ |cell|
+      if cell.is_generate? then
+        join_list = cell.get_join_list
+        join = join_list.get_item( :bridgeName )
+        if join == nil then
+          name = "\"#{cell.get_name}\""
+        else
+          rhs = join.get_rhs
+          attr_list = cell.get_celltype.get_attribute_list
+          name = rhs.eval_const join_list, attr_list
+        end
+
+        name_array = ct.get_name_array( cell )
+        file.print "\t{ #{name}, #{name_array[8]} },\n"
+      end
+    }
+
+    file.print <<EOT
+\t{ 0, 0 },
+};
+
+EOT
+
+  end
+
+  def gen_preamble_ptr( file, b_singleton, ct_name, global_ct_name )
+    tment = @@ptr_list[ ct_name ]
+    file.print <<EOT
+
+GET_SET_#{tment[3]}( #{tment[1]}, #{tment[0]} )
+POINTER_CLASS( #{tment[1]}, #{tment[0]} )
+EOT
+  end
+
+  def gen_preamble_struct( file, b_singleton, ct_name, global_ct_name )
+    tag = ct_name
+    structType = @@struct_list[ tag ]
+    file.print <<EOT
+/* struct #{tag} */
+STRUCT_CLASS( #{tag} )
+EOT
+
+    structType.get_members_decl.get_items.each{ |d|
+      type = d.get_type.get_original_type
+      case type
+      when IntType, CIntType
+        bit_size = type.get_bit_size
+        case bit_size
+        when -11, -1
+          tType = "Char"
+          ttype = "char"
+        when -2
+          tType = "Short"
+          ttype = "short"
+        when -3
+          tType = "Int"
+          ttype = "int"
+        when -4
+          tType = "Long"
+          ttype = "long"
+        when -5
+          tType = "IntPtr"
+          ttype = "intptr"
+        when 8, 16, 32, 64
+          tType = "Int#{bit_size}"
+          ttype = "int#{bit_size}"
+        else
+            raise "MrubyBridgeSignaturePlugin: MrubyBridgeSignaturePlugin: cannot handle bit_size #{bit_size}"
+        end
+        file.print "MEMBER_GET_SET_INT( #{tag}, #{d.get_name}, #{tType}, #{ttype} )\n"
+      when FloatType, CFloatType
+        file.print "MEMBER_GET_SET_FLOAT( #{tag}, #{d.get_name} )\n"
+      else
+        raise "MrubyBridgeSignaturePlugin: MrubyBridgeSignaturePlugin: cannot handle type"
+      end
+    }
+
+  end
+
+  def gen_preamble_instance_proto( file, b_singleton, ct_name, global_ct_name )
+    file.print <<EOT
+//  Prototype MBP400
+mrb_value  MrubyBridge_#{@celltype_name}_initialize( mrb_state *mrb, mrb_value self);
+EOT
+
+    @func_head_array.each{ |f|
+      if ! f.is_function? then
+        next
+      end
+      if f.get_name != :initialize then
+        func_name = f.get_name
+      else
+        func_name = :initialize_cell
+      end
+
+      ret_type  = f.get_return_type
+      ret_type0 = f.get_return_type.get_original_type
+      b_void    = ret_type0.is_void?
+      plist     = f.get_paramlist.get_items
+
+      file.print <<EOT
+mrb_value  MrubyBridge_#{@celltype_name}_#{func_name}( mrb_state *mrb, mrb_value self );
+EOT
+    }
+  end
+
+  def gen_preamble_instance_initialize( file, b_singleton, ct_name, global_ct_name )
+    file.print <<EOT
+
+/* MBP100 */
+mrb_value
+MrubyBridge_#{@celltype_name}_initialize( mrb_state *mrb, mrb_value self)
+{
+	mrb_value	name;
+	struct tecs_#{@celltype_name} *tecs_cb;
+	const struct name_to_cbp_#{@celltype_name} *ntc;
+
+	/* set DATA_TYPE earlier to avoid SEGV */
+	DATA_TYPE( self ) = &data_type_#{@celltype_name};
+
+	mrb_get_args(mrb, "o", &name );
+	if( mrb_type( name ) != MRB_TT_STRING ){
+		mrb_raise(mrb, E_NAME_ERROR, "cell name not string");
+	}
+	for( ntc = &Name_to_cbp_#{@celltype_name}[0]; ntc->name != NULL; ntc++ ){
+		if( strcmp( ntc->name, RSTRING_PTR( name ) ) == 0 )
+			break;
+	}
+	if( ntc->name == 0 ){
+		mrb_raise(mrb, E_ARGUMENT_ERROR, "cell not found");
+	}
+	tecs_cb = (struct tecs_#{@celltype_name} *)mrb_malloc(mrb, sizeof(struct tecs_#{@celltype_name}) );
+	tecs_cb->cbp = ntc->cbp;
+	DATA_PTR( self ) = (void *)tecs_cb;
+
+	return self;
+}
+EOT
+  end
+
+  def gen_preamble_bridge_func( file, b_singleton, ct_name, global_ct_name )
+
+    @func_head_array.each{ |f|
+      if ! f.is_function? then
+        next
+      end
+      if f.get_name != :initialize then
+        func_name = f.get_name
+      else
+        func_name = :initialize_cell
+      end
+
+      ret_type  = f.get_return_type
+      ret_type0 = f.get_return_type.get_original_type
+      b_void    = ret_type0.is_void?
+      plist     = f.get_paramlist.get_items
+
+      file.print <<EOT
+
+/* bridge function (MBP101) */
+mrb_value
+MrubyBridge_#{ct_name}_#{func_name}( mrb_state *mrb, mrb_value self )
+{
+	/* cellcbp (MBP105) */
+	CELLCB	*p_cellcb = ((struct tecs_#{@celltype_name} *)DATA_PTR(self))->cbp;
+EOT
+      
+      file.print "	/* variables for return & parameter (MBP110) */\n"
+      if ! b_void then
+        file.print "	", ret_type.get_type_str, "\tret_val", ret_type.get_type_str_post, ";\n"
+      end
+      arg_str = ""
+      n_param  = 0
+      n_scalar = 0
+      n_ptr    = 0
+      n_struct = 0
+      plist.each{ |param|
+        case param.get_direction
+        when :IN, :INOUT, :OUT
+          type = param.get_type.get_original_type
+          case type
+          when IntType
+            file.print "	mrb_int	mrb_", param.get_name, ";\n"
+            file.print "	#{param.get_type.get_type_str}	#{param.get_name}#{param.get_type.get_type_str_post};\n"
+            arg_str += "i"
+            n_param += 1
+            n_scalar += 1
+          when FloatType
+            file.print "	mrb_float	mrb_", param.get_name, ";\n"
+            file.print "	#{param.get_type.get_type_str}	#{param.get_name}#{param.get_type.get_type_str_post};\n"
+            arg_str += "f"
+            n_param += 1
+            n_scalar += 1
+          when BoolType
+            file.print "	mrb_value	mrb_", param.get_name, ";\n"
+            file.print "	#{param.get_type.get_type_str}	#{param.get_name}#{param.get_type.get_type_str_post};\n"
+            arg_str += "o"
+            n_param += 1
+            n_scalar += 1
+          when PtrType
+            file.print "	mrb_value	mrb_", param.get_name, ";\n"
+            file.print "	#{param.get_type.get_type_str}	#{param.get_name}#{param.get_type.get_type_str_post};\n"
+            arg_str += "o"
+            n_param += 1
+            n_ptr += 1
+          when StructType
+            file.print "	mrb_value	mrb_", param.get_name, ";\n"
+            file.print "	#{param.get_type.get_type_str}	*#{param.get_name}#{param.get_type.get_type_str_post};\n"
+            arg_str += "o"
+            n_param += 1
+            n_struct += 1
+          else
+            raise "MrubyBridgeSignaturePlugin: Unknown type"
+          end
+        end
+      }
+
+      if n_param > 0 then
+        file.print "	/* retrieve arguments (MBP111) */\n"
+        file.print "	mrb_get_args(mrb, \"#{arg_str}\""
+        plist.each{ |param|
+          case param.get_direction
+          when :IN, :INOUT, :OUT
+            type = param.get_type.get_original_type
+            case type
+            when IntType
+              file.print ", &mrb_", param.get_name
+            when FloatType
+              file.print ", &mrb_", param.get_name
+            when BoolType
+              file.print ", &mrb_", param.get_name
+            when PtrType
+              file.print ", &mrb_", param.get_name
+            when StructType
+              file.print ", &mrb_", param.get_name
+            else
+              raise "MrubyBridgeSignaturePlugin: Unknown type"
+            end
+          end
+        }
+        file.print " );\n"
+
+        if n_scalar > 0 || n_struct > 0 then
+          file.print "	/* convert mrb to C (MBP112) */\n"
+        end
+        plist.each{ |param|
+          case param.get_direction
+          when :IN, :INOUT, :OUT
+            type = param.get_type.get_original_type
+            case type
+            when IntType
+              ttype = type.get_original_type
+              tment = get_type_map_ent ttype
+              file.print "	VALCHECK_#{tment[1]}( mrb, mrb_#{param.get_name} );\n"
+              file.print "	#{param.get_name} = (#{param.get_type.get_type_str})mrb_#{param.get_name};\n"
+            when FloatType
+              file.print "	#{param.get_name} = (#{param.get_type.get_type_str})mrb_#{param.get_name};\n"
+            when BoolType
+              file.print "	#{param.get_name} = mrb_test( mrb_#{param.get_name} );\n"
+            when PtrType
+              ttype = type.get_type.get_original_type
+              case ttype
+              when StructType
+                file.print "	CHECK_STRUCT( #{ttype.get_name}, mrb_#{param.get_name} );\n"
+                file.print "	#{param.get_name} = (struct #{ttype.get_name}*)DATA_PTR(mrb_#{param.get_name});\n"
+              when IntType
+              when FloatType
+              when BoolType
+              else
+                raise "MrubyBridgeSignaturePlugin: cannot handle type"
+              end
+            when StructType
+              file.print "	CHECK_STRUCT( #{type.get_name}, mrb_#{param.get_name} );\n"
+              file.print "	#{param.get_name} = (struct #{type.get_name}*)DATA_PTR(mrb_#{param.get_name});\n"
+            else
+              raise( "MrubyBridgeSignaturePlugin: canot treat class" )
+            end
+          end
+        }
+
+        if n_ptr > 0 then
+          file.print "	/* convert mrb to C for pointer types (MBP113) */\n"
+        end
+        plist.each{ |param|
+          case param.get_direction
+          when :IN, :INOUT, :OUT
+            type = param.get_type.get_original_type
+            case type
+            when IntType
+            when FloatType
+            when BoolType
+            when PtrType
+              case type.get_type.get_original_type
+              when StructType
+              when IntType
+                ptrMrb2C file, type, param
+              when FloatType
+                ptrMrb2C file, type, param
+              when BoolType
+                ptrMrb2C file, type, param
+              else
+                raise "MrubyBridgeSignaturePlugin: cannot handle type"
+              end
+            when StructType
+            else
+              raise( "MrubyBridgeSignaturePlugin: canot treat class" )
+            end
+          end
+        }
+
+      end
+
+      file.print "	/* calling target (MBP120) */\n"
+      if ! b_void then
+        file.print "	ret_val = "
+      else
+        file.print "	"
+      end
+      delim = ""
+      file.print "cTECS_", f.get_name, "( "
+      plist.each{ |param|
+        if param.get_type.get_original_type.kind_of? StructType then
+          aster = "*"
+        else
+          aster = ""
+        end
+        file.print delim, aster, param.get_name
+        delim = ", "
+      }
+      file.print " );\n"
+      
+      file.print "	/* return (MBP130) */\n"
+      case ret_type0
+      when BoolType
+        file.print "	return ret_val ? mrb_true_value() : mrb_false_value();\n"
+      when IntType
+        file.print "	return mrb_fixnum_value( ret_val );\n"
+      when FloatType
+        file.print "	return mrb_float_value( mrb, ret_val );\n"
+      when VoidType
+        file.print "	return  mrb_nil_value();\n"
+      else
+        raise "MrubyBridgeSignaturePlugin: unknown type"
+      end
+
+      file.print "}\n"
+    }
+  end
+
+  def ptrMrb2C file, type, param
+    ttype = type.get_type.get_original_type
+    tment = get_type_map_ent ttype
+    tstr = tment[1]
+=begin
+    case ttype
+    when IntType
+      bit_size = ttype.get_bit_size
+      case bit_size
+      when -1, -11
+        tstr = "Char"
+      when 8, 16, 32, 64
+        tstr = "Int#{bit_size}"
+      when -2
+        tstr = "Short"
+      when -3
+        tstr = "Int"
+      when -4
+        tstr = "Long"
+      when -5
+        tstr = "IntPtr"
+      else
+        raise "MrubyBridgeSignaturePlugin: not handle type"
+      end
+    when FloatType
+      if ttype.get_bit_size == 32 then
+        tstr = "Float32"
+      else
+        tstr = "Double64"
+      end
+    when BoolType
+      tstr = "Bool"
+    when StructType
+      raise "MrubyBridgeSignaturePlugin: not handle type 2 #{ttype}"
+    else
+      raise "MrubyBridgeSignaturePlugin: not handle type 2 #{ttype}"
+    end
+=end
+    if( param.get_size ) then
+      sz_str = param.get_size.to_s
+    elsif param.get_string then      # mikan とりあえず size_is と string の同時指定 (二重ポインタ) はなし
+      sz_str = param.get_string.to_s
+    else
+      sz_str = "1"
+    end
+    # 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})"
+    else
+      cast_str = ""
+    end
+
+    modify = ""
+    case param.get_direction
+    when :OUT, :INOUT
+      case tstr
+      when "Char", "SChar", "UChar"
+        modify = "Mod"
+      end
+    end
+    if param.is_nullable? then
+      nullable = "Nullable"
+    else
+      nullable = ""
+    end
+
+    # file.print "	CHECK_POINTER( #{tstr}, mrb_#{param.get_name}, #{sz_str} );\n"
+    # file.print "	#{param.get_name} = #{cast_str}((struct #{tstr}PointerBody*)(DATA_PTR(mrb_#{param.get_name})))->buf;\n"
+    file.print "	#{param.get_name} = CheckAndGet#{tstr}Pointer#{modify}#{nullable}( mrb, mrb_#{param.get_name}, #{sz_str} );\n"
+  end
+
+  def get_celltype_name
+    @celltype_name
+  end
+
+  #=== プラグイン引数 ignoreUnsigned
+  def set_ignoreUnsigned rhs
+    if rhs == "true" || rhs == nil then
+      @b_ignoreUnsigned = true
+    end
+  end
+  #=== プラグイン引数 include
+  def set_include rhs
+    funcs = rhs.split ','
+    funcs.each{ |rhs_func|
+      found = false
+      rhs_func.gsub!( /\s/, "" )
+      @signature.get_function_head_array.each{ |a|
+        if rhs_func.to_sym == a.get_name then
+          found = true
+        end
+      }
+      if found == false then
+        cdl_error( "MRB1009 include function '$1' not found in signagture '$2'", rhs, @signature.get_name )
+      else
+        @includes << rhs_func.to_sym
+      end
+    }
+  end
+  #=== プラグイン引数 exclude
+  def set_exclude rhs
+    funcs = rhs.split ','
+    funcs.each{ |rhs_func|
+      rhs_func.gsub!( /\s/, "" )
+      func_head = @signature.get_function_head rhs_func.to_sym
+      if func_head == false then
+        cdl_error( "MRB1010 exclude function '$1' not found in signagture '$2", rhs, @signature.get_name )
+      else
+        @excludes << rhs_func.to_sym
+      end
+    }
+  end
+  #=== プラグイン引数 auto_exclude
+  def set_auto_exclude rhs
+    if rhs == "false" then
+      @b_auto_exclude = false
+    elsif rhs == "true" then
+      @b_auto_exclude = true     # auto_exclude = true by default 
+    else
+      cdl_warning( "MRB9999 auto_exclude: unknown rhs value ignored. specify true or false" )
+    end
+  end
+end
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MultiPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MultiPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/MultiPlugin.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2017 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/NotifierPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/NotifierPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/NotifierPlugin.rb	(revision 374)
@@ -1,3 +1,6 @@
 # -*- coding: utf-8 -*-
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
 #
 #  Copyright (C) 2015 by Ushio Laboratory
@@ -5,5 +8,38 @@
 #  Copyright (C) 2015-2016 by Embedded and Real-Time Systems Laboratory
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
+#  Copyright (C) 2015-2018 by TOPPERS Project
 #
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#  $Id$
+#++
 
 NotifierPluginArgProc = {
@@ -128,6 +164,7 @@
 			# @param [Cell, Symbol] cell セル．セルについて一般化する場合は `:generic`
 			# @param [Integer, Symbol, nil] subscript 添字．添字について一般化する場合は `:generic`
+			# @param [Celltype] 呼び先のセルタイプ、cell==:generic の場合のみ有効
 			# @private
-			def generate_inner(context, fn_name, cell, subscript)
+			def generate_inner(context, fn_name, cell, subscript, callee_ct=nil)
 				source_file = context.source_file
 				header_file = context.header_file
@@ -141,5 +178,6 @@
 				unless ct.is_singleton?
 					if cell == :generic
-						params << "(CELLIDX)extinf"
+						params << "(#{callee_ct.get_global_name}_IDX)extinf"
+						# params << "(CELLIDX)extinf"
 					else
 						# セルのCELLIDXを得る
@@ -233,5 +271,5 @@
 
 						generate_inner context, fn_name,
-							:generic, subscript
+							:generic, subscript, ct
 
 						props.each { |prop|
@@ -445,5 +483,5 @@
 	    # join:: Join : 結合 (declarationがPortであるもの)
 		def validate_join(handler, cell, join)
-        	return !generate_attr_map(handler, cell).nil?
+        return !generate_attr_map(handler, cell).nil?
 		end
 
@@ -872,9 +910,9 @@
     	parse_plugin_arg
     	unless @factory
-    		cdl_error("ASP1003 celltype $1: option factory is not specified",
+    		cdl_error("NTF1003 celltype $1: option factory is not specified",
     			celltype.get_name)
     	end
     	unless @output_file
-    		cdl_error("ASP1003 celltype $1: option output_file is not specified",
+    		cdl_error("NTF1003 celltype $1: option output_file is not specified",
     			celltype.get_name)
     	end
@@ -883,5 +921,5 @@
     def set_factory(template_string)
     	unless @factory.nil?
-    		cdl_error("ASP1003 celltype $1: option factory was specified more than once",
+    		cdl_error("NTF1003 celltype $1: option factory was specified more than once",
     			celltype.get_name)
     	end
@@ -891,5 +929,5 @@
     def set_factory_output_file(output_file)
     	unless @output_file.nil?
-    		cdl_error("ASP1003 celltype $1: option output_file was specified more than once",
+    		cdl_error("NTF1003 celltype $1: option output_file was specified more than once",
     			celltype.get_name)
     	end
@@ -898,5 +936,5 @@
 
     def gen_factory file
-        puts "===== begin #{@celltype.get_name.to_s} plugin ====="
+        # puts "===== begin #{@celltype.get_name.to_s} plugin ====="
 
         kernelCfg = AppFile.open( "#{$gen}/#{@output_file}" )
@@ -922,5 +960,5 @@
 			subst_attr = @celltype.find(name)
 			unless subst_attr
-	    		cdl_error( "ASP1007 celltype $1: additional_param: attribute $2 does not exist.",
+	    		cdl_error( "NTF1007 celltype $1: additional_param: attribute $2 does not exist.",
 	    			@celltype.get_name, name)
 			end
@@ -935,8 +973,9 @@
 
         kernelCfg.close
-        puts "===== end #{@celltype.get_name.to_s} plugin ====="
+        # puts "===== end #{@celltype.get_name.to_s} plugin ====="
     end
 
     def gen_factory_for_cell(kernelCfg, cell)
+      # print "########## gen_factory_for_cell cell=#{cell.get_name}\n"
     	handler_flags = []
     	handler_args = []
@@ -959,12 +998,28 @@
 			when 'false' then ignoreErrors = false
 			else
-				cdl_warning( "ASP1005 cell $1: unrecognized value '$2' specified for ignoreErrors",
+				cdl_warning2( cell.get_locale, "NTF1005 cell $1: unrecognized value '$2' specified for ignoreErrors",
 					cell.get_name, ignoreErrors )
 				ignoreErrors = false
 		end
 
+    # ドメイン指定用文字列
+    pre_text  = ""
+    post_text = "\n"
+    indent    = ""
+ 
     	[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
+        if cell.get_region.get_domain_root.get_domain_type then
+          # print "cell=#{cell.get_name} domain_root=#{domain_root.get_name} domain_type=#{domain_root.get_domain_type.get_name} domain_option=#{domain_root.get_domain_type.get_option}\n"
+        else
+          # print "cell=#{cell.get_name} domain_root=#{cell.get_region.get_domain_root.get_name}\n"
+        end
+        if call_join
+          # print "validate_join: hanlder=#{handler.class.name} cell=#{cell.get_name} join=#{call_join.get_name} rhs_cell=#{call_join.get_cell}\n"
+        else
+          # print "validate_join: hanlder=#{handler.class.name} cell=#{cell.get_name}\n"
+        end
 
 	    	# ハンドラタイプを判別する
@@ -974,10 +1029,59 @@
 
 	    	if matches.length == 0
-	    		cdl_error( "ASP1001 cell $1: no matching handler type found for $2", cell.get_name, handler.call_port_name )
+	    		cdl_error2( cell.get_locale, "NTF1001 cell $1: no matching handler type found for $2", cell.get_name, handler.call_port_name )
 	    		next
-	    	end
+        end
 
 			# 最初に見つかった有効なハンドラタイプを使用
 	    	ht = matches[0]
+
+      # ドメインプラグインが指定されている場合、所属ドメインのチェック
+      domain_root = cell.get_region.get_domain_root
+      if domain_root.get_domain_type then
+        if domain_root.get_domain_type.get_name == :HRP then
+          option = domain_root.get_domain_type.get_option
+          matches.each{ |match|
+            # p "match:#{match}"
+            case match
+            when ActivateTaskHandlerType,       WakeUpTaskHandlerType,
+                 SetVariableHandlerType,        SetVariableToErrorCodeHandlerType,
+ 		             IncrementVariableHandlerType,  SignalSemaphoreHandlerType, 
+		             SetEventflagHandlerType,       SendToDataqueueHandlerType,
+		             SendErrorCodeToDataqueueHandlerType
+              if option == "OutOfDomain" then
+                cdl_error2( cell.get_locale, "NTF9999: NotifierPlugin: $1 cannot be placed out of domain", cell.get_name )
+              elsif call_join.get_cell.get_region.get_domain_root == nil ||
+                    call_join.get_cell.get_region.get_domain_root != domain_root then
+                cdl_error2( cell.get_locale, "NTF9999: NotifierPlugin: $1 and $2 must be placed in same domain", cell.get_name, call_join.get_cell.get_name )
+              end
+              dbgPrint "#{self.class.name}: match pattern 1.\n"
+            when UserHandlerType
+              if option != "kernel" then
+                cdl_error2( cell.get_locale, "NTF9999: NotifierPlugin: $1 can be placed in kernel domain only, because notify target is handler", cell.get_name )
+              elsif call_join.get_cell.get_region.get_domain_root == nil ||
+                    call_join.get_cell.get_region.get_domain_root != domain_root then
+                cdl_error2( cell.get_locale, "NTF9999: NotifierPlugin: $1 and $2 must be placed in same domain", cell.get_name, call_join.get_cell.get_name )
+              end
+              dbgPrint "#{self.class.name}: match pattern 2.\n"
+		        when NullHandlerType.new  # エラー通知を指定していない
+              dbgPrint "#{self.class.name}: match pattern 3.\n"
+            end
+          }
+
+          # if cell.get_region.get_param == :KERNEL_DOMAIN
+          if option == "kernel"
+            pre_text  = "KERNEL_DOMAIN{\n"
+            post_text = "}\n"
+            indent    =  "\t"
+          elsif option != "OutOfDomain" then
+            pre_text  = "DOMAIN(#{domain_root.get_name.to_s}){\n"
+            post_text = "}\n"
+            indent    =  "\t"
+          end
+        else
+          cdl_error( "NTF9999: NotifierPlugin: unknown domain type $1", domain_root.get_domain_type.get_name )
+        end
+
+      end
 
 			# 通知ハンドラで「エラーが発生するはずがない」のに「エラーハンドラが指定されている」
@@ -986,9 +1090,9 @@
 			#  なため、検出は行わない。)
     		if handler == ERROR_HANDLER && !ht.is_a?(NullHandlerType) && !event_handler_might_fail
-	    		cdl_error( "ASP1004 cell $1: handler type $2 which never raises an error was inferred for the normal notification handler, but an error notification handler was specified.",
+	    		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.",
 	    			cell.get_name, handler_flag)
     		end
     		if handler == ERROR_HANDLER && ht.is_a?(NullHandlerType) && event_handler_might_fail && !ignoreErrors
-	    		cdl_warning( "ASP1006 cell $1: handler type $2 which might raise an error was inferred for the normal notificaton handler, but an error notification handler was not specified.",
+	    		cdl_warning2( cell.get_locale, "NTF1006 cell $1: handler type $2 which might raise an error was inferred for the normal notificaton handler, but an error notification handler was not specified.",
 	    			cell.get_name, handler_flag)
     		end
@@ -1057,11 +1161,33 @@
 			# $id$等の置換
 			cell.get_celltype.subst_name(subst, name_array)
-    	}
-
-    	# 出力
-    	kernelCfg.puts text
-
-    end
-    private :gen_factory_for_cell
+      }
+
+     # 出力 (CRE_xxx)
+     kernelCfg.print pre_text
+     kernelCfg.print indent, text, "\n"
+     gen_sac kernelCfg, cell, indent
+     kernelCfg.print post_text
+   end
+
+   def gen_sac file, cell, indent
+     domain_root = cell.get_region.get_domain_root
+     if domain_root.get_domain_type then
+       id = (cell.get_attr_initializer :id).to_s
+                 name_array = cell.get_celltype.get_name_array(cell)
+       case cell.get_celltype.get_name
+       when :tCyclicNotifier
+         obj_type = "CYC"
+       when :tAlarmNotifier
+         obj_type = "ALM"
+       else
+         raise "NotifierPlugin: unknown celltype #{cell.get_celltype.get_name}"
+       end
+       id = cell.get_celltype.subst_name(id, name_array)
+       # p obj_type
+       # p HRPPlugin.get_sac_str cell
+       file.print indent, "SAC_#{obj_type}( #{id}, #{HRPPlugin.get_sac_str cell} );\n"
+     end
+   end
+   private :gen_factory_for_cell
 
 end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/OpaqueRPCPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/OpaqueRPCPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/OpaqueRPCPlugin.rb	(revision 374)
@@ -56,5 +56,5 @@
   #=== RPCPlugin の initialize
   #  説明は ThroughPlugin (plugin.rb) を参照
-  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
+  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super
     @b_noClientSemaphore = false
@@ -254,4 +254,9 @@
     nest = @end_region.gen_region_str_pre file
     nest_str = "  " * nest
+    if @next_cell_port_subscript then
+      subscript = '[' + @next_cell_port_subscript.to_s + ']'
+    else
+      subscript = ""
+    end
 
     if @serverErrorHandler then
@@ -282,5 +287,5 @@
 #{nest_str}  cell #{@rpc_server_channel_celltype_name} #{@serverChannelCell}_Unmarshaler {
 #{nest_str}    cChannel = #{@serverChannelCell}.eC1;
-#{nest_str}    #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name};
+#{nest_str}    #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
 #{serverErrorHandler_str}#{nest_str}  };
 EOT
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/RPCPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/RPCPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/RPCPlugin.rb	(revision 374)
@@ -65,5 +65,5 @@
   #=== RPCPlugin の initialize
   #  説明は ThroughPlugin (plugin.rb) を参照
-  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
+  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super
     @b_noClientSemaphore = false
@@ -197,4 +197,9 @@
     nest = @region.gen_region_str_pre file
     indent_str = "  " * nest
+    if @next_cell_port_subscript then
+      subscript = '[' + @next_cell_port_subscript.to_s + ']'
+    else
+      subscript = ""
+    end
 
     file.print <<EOT
@@ -233,5 +238,5 @@
     file.print <<EOT
 #{indent_str}cell #{@rpc_channel_celltype_name} #{@cell_name} {
-#{indent_str}  #{@call_port_name} = #{@next_cell.get_name}.#{@next_cell_port_name};
+#{indent_str}  #{@call_port_name} = #{@next_cell.get_name}.#{@next_cell_port_name}#{subscript};
 #{indent_str}  cTDR         = #{@channelCellName}.eTDR;
 #{indent_str}  cEventflag   = #{@channelCellName}.eEventflag;
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatCellPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatCellPlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatCellPlugin.rb	(revision 374)
@@ -0,0 +1,169 @@
+# -*- coding: utf-8 -*-
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#
+#  Copyright (C) 2015-2018 by TOPPERS Project
+#
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#  $Id$
+#++
+
+#== cell を count 個繰り返すセルプラグイン
+# 不完全点：
+#    指定子に対応していない
+#       cell の指定子 (allocator, id)
+#       結合の指定子 (through)
+class RepeatCellPlugin < CellPlugin
+
+  @@plugin_list = []
+  RepeatCellPluginArgProc = {
+    "count" => Proc.new { |obj,rhs| obj.set_count rhs }
+  }
+
+  def initialize( cell, option )
+    super
+    @@plugin_list << self
+    print "RepeatCellPlugin: #{@cell.get_name}\n"
+    # cell.show_tree 0
+    # @cell.get_join_list.get_items.each{ |j|
+    #  print "Join: #{j.get_name} = #{j.get_rhs.to_s}\n"
+    # }
+    @count = 0
+    @plugin_arg_check_proc_tab = RepeatCellPluginArgProc
+    parse_plugin_arg
+  end
+
+  def gen_cdl_file( file )
+    if $verbose then
+      print "#{self.class}: repeat #{@cell.get_name} #(num} times\n"
+    end
+
+    nest = @cell.get_region.gen_region_str_pre file
+    indent_str = "  " * nest
+    @cell.get_name.to_s =~ /.*[^0-9]([0-9]+)\z/
+    if $1 then
+      tail_zero = $1
+      bname = @cell.get_name.to_s.gsub( /[0-9]+\z/, "" )
+    else
+      cdl_error( "#{self.class}: #{@cell.get_name}'s name ends without '0-9'")
+      return
+    end
+    base_count = tail_zero.to_i
+
+    count = 1
+    num = @count
+    file.print "/*  #{num} times repeat of '#{@cell.get_name}' */\n"
+    while count < num
+
+      # セル名のカウント
+      count_str = (count + base_count).to_s
+      if tail_zero.length > count_str.length then
+        leading_zero = "0" * ( tail_zero.length - count_str.length )
+      else
+        leading_zero = ""
+      end
+      cname = bname + leading_zero + count_str
+
+      #   "cell tCelltype Cell {" 
+      file.print "#{indent_str}cell #{@cell.get_celltype.get_name} #{cname}{\n"
+
+      # Join の CDL 文字列生成
+      @cell.get_join_list.get_items.each{ |j|
+
+        # Join の右辺の解析
+        res = j.get_rhs.analyze_cell_join_expression
+        if res then
+          nsp, subscript, port_name = res[0], res[1], res[2]
+        else
+          nsp = j.get_rhs.analyze_single_identifier
+          if nsp then
+            subscript, port_name = nil, nil
+          else
+            file.print "#{indent_str}  #{j.get_name} = #{j.get_rhs.to_s};\n"
+            next
+          end
+        end
+
+        # 右辺のセル名 (末尾の数字をカウントアップ)
+        nsp.get_name.to_s =~ /(.*[^0-9])([0-9]+)\z/
+        if $2 then
+          rhs_tail_num = $2
+          rhs_name_count = count + rhs_tail_num.to_i
+          if rhs_tail_num.length > rhs_name_count.to_s.length then
+            leading_zero = "0" * ( rhs_tail_num.length - rhs_name_count.to_s.length )
+          else
+            leading_zero = ""
+          end
+          rhs_cname = $1 + leading_zero + rhs_name_count.to_s
+          nsp = nsp.change_name_clone rhs_cname
+        end
+
+        # 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"
+          else
+            file.print "#{indent_str}  #{j.get_name} = #{nsp.get_path_str}.#{port_name};\n"
+          end
+        else
+          # 右辺は単一の識別子
+          file.print "#{indent_str}  #{j.get_name} = #{nsp.get_path_str};\n"
+        end
+      }
+
+      file.print "#{indent_str}};\n\n"
+      count += 1
+    end
+
+    @cell.get_region.gen_region_str_post file
+  end
+
+  #=== count オプションの解析
+  def set_count rhs
+    if rhs =~ /\A\d+\z/
+      @count = rhs.to_i
+    else
+      nsp = NamespacePath.new( rhs.to_sym, true )
+      expr = Expression.create_single_identifier( nsp, nil )
+      res = expr.eval_const( nil )
+      if res == nil then
+        cdl_error( "count value ($1): not single identifier or integer number", rhs.to_s )
+        @count = 0
+      else
+        @count = res
+      end
+    end
+  end
+
+end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatJoinPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatJoinPlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatJoinPlugin.rb	(revision 374)
@@ -0,0 +1,131 @@
+# -*- coding: utf-8 -*-
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#
+#  Copyright (C) 2015-2018 by TOPPERS Project
+#
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#  $Id$
+#++
+
+class RepeatJoinPlugin < CellPlugin
+
+  RepeatJoinPluginArgProc = {
+    "count" => Proc.new { |obj,rhs| obj.set_count rhs }
+  }
+
+  def initialize( cell, option )
+    super
+    print "RepeatJoinPlugin: #{@cell.get_name}\n"
+    # cell.show_tree 0
+    @plugin_arg_check_proc_tab = RepeatJoinPluginArgProc
+    parse_plugin_arg
+
+    @cell.get_join_list.get_items.each{ |j|
+      # print "Join: #{j.get_name} = #{j.get_rhs.to_s}\n"
+
+      # Join の右辺を解析
+      ret = j.get_rhs.analyze_cell_join_expression
+      if ret == nil then
+        next
+      end
+      rhs_nsp = ret[0]; rhs_subscript = ret[1]; rhs_port_name = ret[2]
+
+      # 呼び口配列で、添数が 0 の場合にのみカウントアップさせる
+      if j.get_subscript == 0 then
+        rhs_name = rhs_nsp.get_name.to_s
+        if rhs_name =~ /(.*[^0-9])([0-9]+)\z/ then
+          b_rhs_name_count = true
+          rhs_name = $1
+          n_digits = $2.length
+          rhs_count_base = $2.to_i
+        else
+          b_rhs_name_count = false
+          rhs_count_base = 0
+        end
+
+        if rhs_subscript && rhs_subscript == 0 then
+          b_rhs_subscript_count = true
+        else
+          b_rhs_subscript_count = false
+        end
+
+        count = 1
+        while count < @count
+          count_str = (count+rhs_count_base).to_s
+
+          if b_rhs_subscript_count then
+            rhs_subscript = count
+          end
+
+          if b_rhs_name_count then
+            if n_digits - count_str.length > 0 then
+              leading_zero = "0" * ( n_digits - count_str.length )
+            else
+              leading_zero = ""
+            end
+
+            rhs_name_real = rhs_name + leading_zero + count_str
+          else
+            rhs_name_real = rhs_name
+          end
+          rhs_nsp2 = rhs_nsp.change_name_clone rhs_name_real.to_sym
+
+          rhs = Expression.create_cell_join_expression( rhs_nsp2, rhs_subscript, rhs_port_name )
+          j2 = Join.new( j.get_name, count, rhs )
+          cell.new_join j2
+
+          count += 1
+        end
+      end
+    }
+  end
+
+  #=== count オプションの解析
+  def set_count rhs
+    if rhs =~ /\A\d+\z/
+      @count = rhs.to_i
+    else
+      nsp = NamespacePath.new( rhs.to_sym, true )
+      expr = Expression.create_single_identifier( nsp, nil )
+      res = expr.eval_const( nil )
+      if res == nil then
+        cdl_error( "count value ($1): not single identifier or integer number", rhs.to_s )
+        @count = 0
+      else
+        @count = res
+      end
+    end
+  end
+
+end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedOpaqueRPCPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedOpaqueRPCPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedOpaqueRPCPlugin.rb	(revision 374)
@@ -68,5 +68,5 @@
   #=== RPCPlugin の initialize
   #  説明は ThroughPlugin (plugin.rb) を参照
-  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
+  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super
     initialize_opaque_marshaler
@@ -221,4 +221,10 @@
     nest = @start_region.gen_region_str_pre file
     indent_str = "  " * nest
+    nest_str = "  " * nest
+    if @next_cell_port_subscript then
+      subscript = '[' + @next_cell_port_subscript.to_s + ']'
+    else
+      subscript = ""
+    end
 
     # セルを探す
@@ -303,5 +309,5 @@
 #{indent_str}cell #{@unmarshaler_celltype_name} #{@cell_name}_Server {
 #{indent_str}  cTDR         = #{@shared_channel_cell}_Server.eTDR;
-#{indent_str}  cServerCall  = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name};
+#{indent_str}  cServerCall  = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
 #{ppallocator_join}#{indent_str}};
 EOT
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedRPCPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedRPCPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedRPCPlugin.rb	(revision 374)
@@ -62,5 +62,5 @@
   #=== RPCPlugin の initialize
   #  説明は ThroughPlugin (plugin.rb) を参照
-  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
+  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
 
     # mikan プラグインオプション指定の不一致のチェック task_priority, 
@@ -236,4 +236,9 @@
     nest = @region.gen_region_str_pre file
     indent_str = "  " * nest
+    if @next_cell_port_subscript then
+      subscript = '[' + @next_cell_port_subscript.to_s + ']'
+    else
+      subscript = ""
+    end
 
     # セルを探す
@@ -291,5 +296,5 @@
     file.print <<EOT
 #{indent_str}cell #{@rpc_channel_celltype_name} #{@cell_name} {
-#{indent_str}  #{@call_port_name} = #{@next_cell.get_name}.#{@next_cell_port_name};
+#{indent_str}  #{@call_port_name} = #{@next_cell.get_name}.#{@next_cell_port_name}#{subscript};
 #{indent_str}  cTDR         = #{@shared_channel_cell}.eTDR;
 #{indent_str}  cEventflag   = #{@shared_channel_cell}.eEventflag;
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/TECSInfoPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/TECSInfoPlugin.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/TECSInfoPlugin.rb	(revision 374)
@@ -0,0 +1,283 @@
+# -*- coding: utf-8 -*-
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+# 
+#   Copyright (C) 2017-2018 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#   $Id$
+#++
+
+#== CelltypePlugin for tTECSInfo
+class TECSInfoPlugin < CelltypePlugin
+
+  @@cell_list = []
+  #@celltype::Celltype
+  #@plugin_arg_str::String
+  #@plugin_arg_list::{argNameString=>argOptionString}
+  #@cell_list::[Cell]
+
+  #celltype::     Celltype        セルタイプ（インスタンス）
+  def initialize( celltype, option )
+    super
+    if $unopt_entry == false then
+      cdl_info( "TIF0001 forcely set --unoptimize-entry by TECSInfoPlugin (by importing TECSInfo.cdl)" )
+      $unopt_entry = true
+    end
+  end
+
+  #=== 新しいセル
+  #cell::        Cell            セル
+  #
+  # celltype プラグインを指定されたセルタイプのセルが生成された
+  # セルタイププラグインに対する新しいセルの報告
+  def new_cell( cell )
+    @@cell_list << cell
+
+    # AppFile は、重ね書きようなので、やめる
+    # p "import: cell nTECSInfo::tTECSInfoSub #{cell.get_namespace_path.to_s} under #{cell.get_region.get_name}"
+    # cell.show_tree 0
+    # TECSInfoSub セルのプロトタイプ宣言
+    fn = "#{$gen}/tmp_#{cell.get_region.get_global_name}_TECSInfoSub.cdl"
+    File.open( fn, "w" ){ |f|
+      f.print "/* prototype declaration of TECSInfoSub */\n"
+      nest = cell.get_region.gen_region_str_pre f
+      indent = "    " * nest
+      f.print <<EOT
+#{indent}[in_through()]
+#{indent}region rTECSInfo {
+#{indent}    cell nTECSInfo::tTECSInfoSub TECSInfoSub;
+#{indent}}; /* rTECSInfo} */
+EOT
+      cell.get_region.gen_region_str_post f
+    }
+    Import.new fn
+
+    # セルに cTECSInfo の結合があるか？
+    if cell.get_join_list.get_item( :cTECSInfo ) == nil then
+      # cTECSInfo = rTECSInfo::TECSInfosub.eTECSInfo; の追加
+      nsp = NamespacePath.new( :rTECSInfo, false )
+      nsp.append! :TECSInfoSub
+      rhs = Expression.create_cell_join_expression nsp, nil, :eTECSInfo
+      join = Join.new :cTECSInfo, nil, rhs
+      cell.new_join join
+    end
+  end
+
+  #=== tCelltype_factory.h に挿入するコードを生成する
+  # file 以外の他のファイルにファクトリコードを生成してもよい
+  # セルタイププラグインが指定されたセルタイプのみ呼び出される
+  def gen_factory file
+    File.open( "#{$gen}/include_all_signature_header.h", "w" ){ |f|
+      f.print <<EOT
+#ifndef include_all_signature_header_h
+#define include_all_signature_header_h
+
+EOT
+      Namespace.get_root.travers_all_signature{ |sig|
+        f.print "#include \"#{sig.get_global_name}_tecsgen.h\"\n"
+      }
+      f.print <<EOT
+
+#endif /* include_all_signature_header_h */
+EOT
+    }
+
+    undefs2 = [ :INITIALIZE_CB, :FOREACH_CELL, :END_FOREACH_CELL ]
+    f = AppFile.open( "#{$gen}/nTECSInfo_tVarDeclInfo_factory.h" )
+    Namespace.get_root.print_struct_define f
+
+    undefs = [ :VALID_IDX, :GET_CELLCB, :CELLCB, :CELLIDX,
+               :tVarDeclInfo_IDX, :ATTR_name, :ATTR_sizeIsExpr,
+               :ATTR_declType, :ATTR_offset ]
+
+    f.print <<EOT
+
+/***** Offset of attr & var of celltype  *****/
+#define TOPPERS_CB_TYPE_ONLY
+
+/* In case a celltype has 'inline' entry,
+ * some macros are temporally defined
+ * even if TOPPERS_CB_TYPE_ONLY is defined.
+ * To avoid redefinition warning, undef these macros.
+ */
+#{ str=""; undefs.each{|u| str += "#undef #{u}\n" }; str }
+EOT
+    if $ram_initializer then
+      undefs2.each{|u|
+        f.print "#undef #{u}\n"
+      }
+    end
+    Namespace.get_root.print_celltype_define_offset f
+    f.print <<EOT
+
+/* redefine macros */
+#define tVarDeclInfo_IDX  nTECSInfo_tVarDeclInfo_IDX
+
+EOT
+    if $ram_initializer then
+      f.print <<EOT
+#define FOREACH_CELL(i,p_cb)   { (void)(i);
+#define END_FOREACH_CELL   }
+#define INITIALIZE_CB(p_that)   (void)(p_that);
+#define SET_CB_INIB_POINTER(i,p_that)
+EOT
+    end
+    f.close
+
+    undefs = [ :N_CP_cEntryInfo, :NCP_cEntryInfo, :N_CP_cCallInfo, :NCP_cCallInfo,
+               :N_CP_cAttrInfo, :NCP_cAttrInfo, :N_CP_cVarInfo, :NCP_cVarInfo,
+               :VALID_IDX, :GET_CELLCB, :CELLCB, :CELLIDX, :ATTR_name, :ATTR_b_singleton,
+               :ATTR_b_IDX_is_ID_act, :ATTR_sizeOfCB, :ATTR_sizeOfINIB, :ATTR_n_cellInLinUnit,
+               :ATTR_n_cellInSystem, :cEntryInfo_getName, :cEntryInfo_getNameLength,
+               :cEntryInfo_getSignatureInfo, :cEntryInfo_getArraySize, :cEntryInfo_isInline,
+               :cCallInfo_getName, :cCallInfo_getNameLength, :cCallInfo_getSignatureInfo,
+               :cCallInfo_getArraySize, :cCallInfo_getSpecifierInfo, :cCallInfo_getInternalInfo,
+               :cCallInfo_getLocationInfo, :cCallInfo_getOptimizeInfo, :cAttrInfo_getName,
+               :cAttrInfo_getOffset, :cAttrInfo_getTypeInfo, :cAttrInfo_getSizeIsExpr,
+               :cAttrInfo_getSizeIs, :cVarInfo_getName, :cVarInfo_getOffset, :cVarInfo_getTypeInfo,
+               :cVarInfo_getSizeIsExpr, :cVarInfo_getSizeIs, :cEntryInfo_refer_to_descriptor,
+               :cEntryInfo_ref_desc, :cCallInfo_refer_to_descriptor, :cCallInfo_ref_desc,
+               :cAttrInfo_refer_to_descriptor, :cAttrInfo_ref_desc, :cVarInfo_refer_to_descriptor,
+               :cVarInfo_ref_desc, :is_cEntryInfo_joined, :is_cCallInfo_joined,
+               :is_cAttrInfo_joined, :is_cVarInfo_joined, :eCelltypeInfo_getName,
+               :eCelltypeInfo_getNameLength, :eCelltypeInfo_getNAttr, :eCelltypeInfo_getAttrInfo,
+               :eCelltypeInfo_getNVar, :eCelltypeInfo_getVarInfo, :eCelltypeInfo_getNCall,
+               :eCelltypeInfo_getCallInfo, :eCelltypeInfo_getNEntry, :eCelltypeInfo_getEntryInfo,
+               :eCelltypeInfo_isSingleton, :eCelltypeInfo_isIDX_is_ID, :eCelltypeInfo_hasCB,
+               :eCelltypeInfo_hasINIB, :FOREACH_CELL, :END_FOREACH_CELL ]
+
+    f = AppFile.open( "#{$gen}/nTECSInfo_tCelltypeInfo_factory.h" )
+    undefs.each{ |u|
+      f.print "#undef #{u}\n"
+    }
+    f.print "#define TOPPERS_CB_TYPE_ONLY\n"
+    Namespace.get_root.print_celltype_define f
+    # FOREACH_CELL を出しなおす
+    ct = Namespace.find [ "::", :nTECSInfo, :tCelltypeInfo ]
+    ct.gen_ph_foreach_cell f
+    ct.gen_ph_cb_initialize_macro f
+    f.print "\n"
+    f.close
+   
+    undefs = [ :VALID_IDX, :GET_CELLCB, :CELLCB, :CELLIDX,
+               :tCallInfo_IDX, :ATTR_name, :ATTR_offset, :ATTR_b_inCB,
+               :ATTR_b_optional, :ATTR_b_omit, :ATTR_b_dynamic,
+               :ATTR_b_ref_desc, :ATTR_b_allocator_port,
+               :ATTR_b_require_port, :ATTR_b_VMT_useless,
+               :ATTR_b_skelton_useless, :ATTR_b_cell_unique,
+               :cSignatureInfo_getName, :cSignatureInfo_getNameLength,
+               :cSignatureInfo_getNFunction,
+               :cSignatureInfo_getFunctionInfo,
+               :cSignatureInfo_refer_to_descriptor,
+               :cSignatureInfo_ref_desc, :eCallInfo_getName,
+               :eCallInfo_getNameLength, :eCallInfo_getSignatureInfo,
+               :eCallInfo_getArraySize, :eCallInfo_isOptional,
+               :eCallInfo_isDynamic, :eCallInfo_isRefDesc,
+               :eCallInfo_isOmit ]
+
+    f = AppFile.open( "#{$gen}/nTECSInfo_tCallInfo_factory.h" )
+    f.print <<EOT
+
+/***** Offset of attr & var of celltype  *****/
+#define TOPPERS_CB_TYPE_ONLY
+
+/* In case a celltype has 'inline' entry,
+ * some macros are temporally defined
+ * even if TOPPERS_CB_TYPE_ONLY is defined.
+ * To avoid redefinition warning, undef these macros.
+ */
+#{ str=""; undefs.each{|u| str += "#undef #{u}\n" }; str }
+EOT
+    if $ram_initializer then
+      undefs2.each{|u|
+        f.print "#undef #{u}\n"
+      }
+    end
+
+    Namespace.get_root.print_call_define f
+    f.print <<EOT
+
+/* redefine macros */
+#define tCallInfo_IDX  nTECSInfo_tCallInfo_IDX
+
+EOT
+    if $ram_initializer then
+      f.print <<EOT
+#define FOREACH_CELL(i,p_cb)   { (void)(i);
+#define END_FOREACH_CELL   }
+#define INITIALIZE_CB(p_that)   (void)(p_that);
+#define SET_CB_INIB_POINTER(i,p_that)
+
+EOT
+    end
+    f.close
+
+    f = AppFile.open( "#{$gen}/nTECSInfo_tEntryInfo_factory.h" )
+    Namespace.get_root.print_entry_define f
+    f.close
+
+    undefs = [ :GET_CELLCB, :CELLCB, :CELLIDX, :ATTR_name, :INITIALIZE_CB, :FOREACH_CELL ]
+    f = AppFile.open( "#{$gen}/nTECSInfo_tCellInfo_factory.h" )
+    undefs.each{ |u|
+      f.print "#undef #{u}\n"
+    }
+    Region.get_root.print_cell_define f
+    # FOREACH_CELL を出しなおす
+    ct = Namespace.find [ "::", :nTECSInfo, :tCellInfo ]
+    ct.gen_ph_foreach_cell f
+    ct.gen_ph_cb_initialize_macro f
+    f.close
+
+    f = AppFile.open( "#{$gen}/nTECSInfo_tRawEntryDescriptorInfo_factory.h" )
+    Region.get_root.print_entry_descriptor_define f
+    f.close
+  end
+
+  #=== 後ろの CDL コードを生成
+  #プラグインの後ろの CDL コードを生成
+  #file:: File:
+  def self.gen_post_code( file )
+    if Generator.get_n_error > 0 then
+      Generator.info( "I9999 TECSInfoPlugin does not generate TECSInfo code because of early error" )
+      return
+    end
+    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
+    file.print <<EOT
+/*------------ #{self.name} post code ------------*/
+EOT
+    @@cell_list.each{|cell|
+      root = cell.get_region # .get_link_root
+      TECSInfo.print_info file, root
+    }
+  end
+end
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ThroughPlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ThroughPlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/ThroughPlugin.rb	(revision 374)
@@ -47,4 +47,5 @@
 #@next_cell:: Cell                    呼び口を結合するセル
 #@next_cell_port_name:: Symbol       呼び口を結合する受口の名前
+#@next_cell_port_subscript::Nil|Integer   呼び口を結合する受口の配列添数．受け口配列でない場合 nil
 #@signature::      Signature          シグニチャ
 #@celltype::       Celltype           呼び先のセルのセルタイプ. through が連接する場合、最終的な呼び先のセルのセルタイプ
@@ -74,8 +75,9 @@
   #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, signature, celltype, 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                      # 生成すべきセル名（受け口側のセル名）
@@ -83,4 +85,5 @@
     @next_cell = next_cell                      # 呼び先のセル
     @next_cell_port_name = next_cell_port_name
+    @next_cell_port_subscript = next_cell_port_subscript
     @signature = signature
     @entry_port_name = :"eThroughEntry"
@@ -136,4 +139,9 @@
   def get_through_entry_port_name
     @entry_port_name
+  end
+
+  #===  生成されたセルの受け口配列添数を得る
+  def get_through_entry_port_subscript
+    @entry_port_subscript
   end
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/TracePlugin.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/TracePlugin.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/TracePlugin.rb	(revision 374)
@@ -44,5 +44,5 @@
   #=== TracePlugin の initialize
   #  説明は ThroughPlugin (plugin.rb) を参照
-  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell )
+  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
 
     @maxArrayDisplay = 16
@@ -141,4 +141,9 @@
       nest = @region.gen_region_str_pre file
       indent_str =  "  " * nest
+      if @next_cell_port_subscript then
+        subscript = '[' + @next_cell_port_subscript.to_s + ']'
+      else
+        subscript = ""
+      end
 
       if @probeName then
@@ -155,5 +160,5 @@
       file.print <<EOT
 #{indent_str}cell #{@ct_name} #{@cell_name} {
-#{indent_str}  #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name};
+#{indent_str}  #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
 #{probeName_str}#{caller_cell_str}#{indent_str}};
 EOT
@@ -210,8 +215,13 @@
     }
     file.print( " );\n" )
+    if @next_cell_port_subscript then
+      subscript = '[' + @next_cell_port_subscript.to_s + ']'
+    else
+      subscript = ""
+    end
 
     file.print <<EOT
 \tgetMicroTime( &utime );
-\tsyslog( LOG_INFO, \"Leave: %sTime=%d: #{@next_cell.get_name}.#{@next_cell_port_name}.#{func_name}\", ATTR_probeName_str, utime );
+\tsyslog( LOG_INFO, \"Leave: %sTime=%d: #{@next_cell.get_name}.#{@next_cell_port_name}#{subscript}.#{func_name}\", ATTR_probeName_str, utime );
 EOT
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenHRP2Marshaler.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenHRP2Marshaler.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenHRP2Marshaler.rb	(revision 374)
@@ -35,4 +35,5 @@
 #   の責任を負わない．
 #  
+#   $Id$
 #++
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenOpaqueMarshaler.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenOpaqueMarshaler.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenOpaqueMarshaler.rb	(revision 374)
@@ -4,5 +4,5 @@
 #      Generator for TOPPERS Embedded Component System
 #  
-#   Copyright (C) 2008-2014 by TOPPERS Project
+#   Copyright (C) 2008-2018 by TOPPERS Project
 #--
 #   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
@@ -464,6 +464,8 @@
 	/* Channel Lock */
 	SET_RPC_STATE( state_, RPCSTATE_CLIENT_GET_SEM );
-	if( is_cLockChannel_joined() )
-		cLockChannel_wait();
+	if( is_cLockChannel_joined() ){
+		if( (ercd_=cLockChannel_wait()) != E_OK )
+			goto error_reset;
+	}
 EOT
 
@@ -554,6 +556,14 @@
 	/* Channel Unlock */
 	SET_RPC_STATE( state_, RPCSTATE_CLIENT_RELEASE_SEM );
-	if( is_cLockChannel_joined() )
-		cLockChannel_signal();
+	if( is_cLockChannel_joined() ){
+		if( (ercd_=cLockChannel_signal()) != E_OK )
+			goto error_reset;
+	}
+EOT
+
+    file.print <<EOT
+	/* state_ is not used in normal case */
+  /* below is to avoid 'set but not used' warnning */
+	(void)state_;
 EOT
 
@@ -630,5 +640,5 @@
         file.print <<EOT
 	}else{
-		return;
+		return E_ID;
 	}
 EOT
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenTransparentMarshaler.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenTransparentMarshaler.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenTransparentMarshaler.rb	(revision 374)
@@ -388,5 +388,5 @@
     };
 #{ppallocator_dealloc_str}
-    return;
+    return E_OK;
 
 error_reset:
@@ -394,4 +394,5 @@
         (void)cTDR_reset();
 #{ppallocator_dealloc_str}
+    return E_OK;
 EOT
 
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/MrubyBridgeCelltypePluginModule.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/MrubyBridgeCelltypePluginModule.rb	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/MrubyBridgeCelltypePluginModule.rb	(revision 374)
@@ -0,0 +1,284 @@
+# -*- coding: utf-8 -*-
+#
+#  TECS Generator
+#      Generator for TOPPERS Embedded Component System
+#  
+#   Copyright (C) 2008-2011 by TOPPERS Project
+#--
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+#  
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+#  
+#   $Id$
+#++
+
+#== celltype プラグインの共通の親クラス
+module MrubyBridgeCelltypePluginModule
+
+  # プラグイン引数名 => Proc
+  MrubyBridgePluginArgProc = { 
+      "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
+      "include_inner_cell" => Proc.new { |obj,rhs| obj.set_include_inner_cell rhs },
+      "exclude_cell" => Proc.new { |obj,rhs| obj.set_exclude_cell rhs },
+      "exclude_port" => Proc.new { |obj,rhs| obj.set_exclude_port rhs },
+      "exclude_port_func" => Proc.new { |obj,rhs| obj.set_exclude_port_func rhs },
+      "auto_exclude" => Proc.new { |obj,rhs| obj.set_auto_exclude rhs },
+  }
+
+  require_tecsgen_lib( "MrubyBridgeCellPlugin.rb" )
+  @@plugin_list = []
+  @@count = 1
+
+  #celltype::     Celltype        セルタイプ（インスタンス）
+  def initialize( celltype, option )
+    dbgPrint "#{self.class.name}: initialzie: #{celltype.get_name}\n"
+
+    super
+    @celltype = celltype
+    @cell_list = []
+    @include_inner_cell = false
+    @exclude_cells = []
+    @exclude_port = []
+    @exclude_port_func = {}
+    @b_ignoreUnsigned = false
+    @b_auto_exclude = true     # auto_exclude = true by default 
+    @@plugin_list << self
+
+    @plugin_arg_check_proc_tab = MrubyBridgePluginArgProc
+    @plugin_arg_str = CDLString.remove_dquote option
+    parse_plugin_arg
+
+    MrubyBridgeCellPlugin.set_gen_post_code_by_dependent
+  end
+
+  #=== 新しいセル
+  #cell::        Cell            セル
+  #
+  # 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 以降のセルは対象から外す
+      cdl_info( "I9999 MrubyBridgeCelltypePlugin: $1 is excluded because cell generated after post_coded", cell.get_name )
+      return
+    end
+
+    # include_inner_cell option
+    if cell.is_cloned? && @include_inner_cell == false then
+    #   p "#{cell.get_name} excluded"
+      cdl_info( "I9999 MrubyBridgeCelltypePlugin: inner cell $1 is excluded", cell.get_name )
+      return
+    # else
+    #   p "#{cell.get_name} included"
+    end
+
+    # exclude_cell option
+    if @exclude_cells.include?( cell.get_name ) then
+      return
+    end
+
+    opt_str = "ignoreUnsigned=#{@b_ignoreUnsigned}, auto_exclude=#{@b_auto_exclude}"
+    @exclude_port.each{ |port|
+      opt_str += ",exclude_port=#{port}"
+    }
+    @exclude_port_func.each{ |port, funcs|
+      funcs.each{ |func|
+        opt_str += ",exclude_port_func=#{port}.#{func}"
+      }
+    }
+
+    # p "MrubyBridgeCelltypePlugin: opt_str=#{opt_str}"
+
+    fn2 = "#{$gen}/tmp_MrubyBridgeCelltypePluginModule_#{@celltype.get_name}_#{@@count}.cdl"
+    f2 = File.open( fn2, "w" )
+    f2.print <<EOT
+/* MrubyBridgeCelltypePluginModule: celltype=#{@celltype.get_name} */
+generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "#{opt_str}" );
+EOT
+    f2.close
+    dbgPrint "MrubyBridgeCelltypePluginModule new_cell: Import #{fn2}\n"
+    Import.new "#{fn2}"
+    @@count += 1
+  end
+
+### 意味解析段階で呼び出されるメソッド ###
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell のコードを生成
+  #      重複して生成してはならない
+  #      すでに生成されている場合は出力しないこと。
+  #      もしくは同名の import により、重複を避けること。
+  #file::        FILE       生成するファイル
+  def gen_cdl_file file
+#   この段階で呼びだすと generate 文が呼び出される前のセルのみの出力となる
+    
+#    dbgPrint "MrubyBridgeCelltypePlugin: gen_cdl_file: #{@celltype.get_name}\n"
+#    file.print <<EOT
+#/* MrubyBridgeCelltypePlugin: celltype=#{@celltype.get_name}
+# *
+# *    cell's generate before celltype's generate
+# */
+#
+#EOT
+#    @celltype.get_cell_list.each { |cell|
+#      @cell_list << cell
+#      # mikan option, region
+#      dbgPrint "MrubyBridgeCelltypePlugin: cell=#{cell.get_name}\n"
+#      file.print <<EOT
+#generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "" );
+#EOT
+#    }
+
+  end
+
+  #=== tCelltype_factory.h に挿入するコードを生成する
+  # file 以外の他のファイルにファクトリコードを生成してもよい
+  # セルタイププラグインが指定されたセルタイプのみ呼び出される
+  def gen_factory file
+  end
+
+  def get_celltype
+    @celltype
+  end
+
+  @@b_gen_post_code_called = false
+  #=== 後ろの CDL コードを生成
+  #プラグインの後ろの CDL コードを生成
+  #file:: File: 
+  def self.gen_post_code( file )
+    dbgPrint "#{self.name}: gen_post_code_body\n"
+
+    if @@b_gen_post_code_called == false then
+      @@b_gen_post_code_called = true
+      MrubyBridgeCellPlugin.gen_post_code_body file
+    end
+
+#    この段階で生成すると、同じポストコードで出力される mruby の初期化コードに反映されない
+    
+#    # MrubyBridgeCelltypePlugin の生成する generate 文は、
+#    fn2 = "#{$gen}/tmp_MrubyBridgeCelltypePlugin_post.cdl"
+#    f2 = File.open( fn2, "w" )
+#    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
+#    dbgPrint "MrubyBridgeCelltypePlugin: gen_post_code\n"
+#    f2.print "/* '#{self.name}' post code */\n"
+#    @@plugin_list.each{ |plugin|
+#      plugin.get_celltype.get_cell_list.each{ |cell|
+#        # mikan option, region
+#        f2.print <<EOT
+#generate( MrubyBridgeCellPlugin, #{cell.get_namespace_path}, "" );
+#EOT
+#      }
+#    }
+#    f2.close
+#    p Import
+#    Import.new "#{fn2}"
+  end
+
+  #=== プラグイン引数 
+
+  #=== プラグイン引数 ignoreUnsigned
+  def set_ignoreUnsigned rhs
+    if rhs == "true" || rhs == nil then
+      @b_ignoreUnsigned = true
+    end
+  end
+
+  def set_include_inner_cell rhs
+    if rhs == "true" || rhs == nil then
+      @include_inner_cell = true
+    end
+  end
+
+  def set_exclude_cell rhs
+    cells = rhs.split ','
+    cells.each{ |rhs_cell|
+      rhs_cell.gsub!( /\s/, "" )
+      @exclude_cells << rhs_cell.to_sym
+    }
+  end
+  def set_exclude_port rhs
+    ports = rhs.split ','
+    ct = @cell.get_celltype
+    return if ct == nil    # error case
+    ports.each{ |rhs_port|
+      obj = ct.find( rhs_port.to_sym )
+      if( ( ! obj.instance_of? Port ) || obj.get_port_type != :ENTRY ) then
+        cdl_error( "MRB9999 exclude_port '$1' not found or not entry in celltype '$2'", rhs_port, ct.get_name )
+      else
+        # print "MRBBridgeCellPlugin: exclude #{rhs_port}\n"
+        @exclude_port << rhs_port
+      end
+    }
+  end
+
+  #=== プラグイン引数 exclude_port_func
+  def set_exclude_port_func rhs
+    port_funcs = rhs.split ','
+    ct = @celltype
+    return if ct == nil    # error case
+    port_funcs.each{ |rhs_port_func|
+      port_func = rhs_port_func.split( '.' )
+      if port_func.length != 2 then
+        cdl_error( "MRB9999 exclude_port_func: '$1' not in 'port.func' form", rhs_port_func )
+      end
+      obj = ct.find( port_func[0].to_sym )
+      if( ( ! obj.instance_of? Port ) || obj.get_port_type != :ENTRY ) then
+        cdl_error( "MRB9999 exclude_port_func: port '$1' not found in celltype '$2'", rhs_port_func, ct.get_name )
+      else
+        signature = obj.get_signature
+        next if signature == nil     # error case
+        if signature.get_function_head port_func[1].to_sym
+          # print "MRBBridgeCellPlugin: #{port_func[0]}.#{port_func[1]} exclude\n"
+          if @exclude_port_func[ port_func[0] ] then
+            @exclude_port_func[ port_func[0] ] <<  port_func[1]
+          else
+            @exclude_port_func[ port_func[0] ] = [ port_func[1] ]
+          end
+        else
+          cdl_error( "MRB9999 include_port_func: func '$1' not found in port '$2' celltype $3",
+                     port_func[1], port_func[0], ct.get_name )
+        end
+      end
+    }
+  end
+
+  #=== プラグイン引数 auto_exclude
+  def set_auto_exclude rhs
+    # print "MrubyBridgeCellPlugin: auto_exclude=#{rhs}\n"
+    if rhs == "false" then
+      @b_auto_exclude = false
+    elsif rhs == "true" then
+      @b_auto_exclude = true     # auto_exclude = true by default 
+    else
+      cdl_warning( "MRB9999 auto_exclude: unknown rhs value ignored. specify true or false" )
+    end
+  end
+end
+
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/version.rb
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/version.rb	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecslib/version.rb	(revision 374)
@@ -1,2 +1,2 @@
 $package = "tecsgen"
-$version = "1.5.0"
+$version = "1.6.4"
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/Makefile.tinet
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/Makefile.tinet	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/Makefile.tinet	(revision 374)
@@ -42,4 +42,4 @@
 INCLUDES	:= $(INCLUDES) -I$(TINET_ROOT)/netdev/$(NET_DEV)
 TINET_DIRS	:= $(TINET_DIRS):$(TINET_ROOT)/netdev/$(NET_DEV)
-TINET_COBJS	:= $(TINET_COBJS) nap_main.o panu_main.o if_btusb.o
+TINET_COBJS	:= $(TINET_COBJS) bt_main.o if_btusb.o
 TINET_KERNEL_CFG := $(TINET_KERNEL_CFG) $(TINET_ROOT)/netdev/$(NET_DEV)/if_btusb.cfg
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.c	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.c	(revision 374)
@@ -0,0 +1,689 @@
+/*
+ * Copyright (C) 2014 BlueKitchen GmbH
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holders nor the names of
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ * 4. Any redistribution, use, or modification is done solely for
+ *    personal benefit and not for any commercial purpose or for
+ *    monetary gain.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
+ * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Please inquire about commercial licensing options at
+ * contact@bluekitchen-gmbh.com
+ *
+ */
+
+#include "btstack-config.h"
+
+#include <stdint.h>
+
+#include <btstack/hci_cmds.h>
+#include <btstack/run_loop.h>
+#include <btstack/sdp_util.h>
+
+#include <kernel.h>
+#include "kernel_cfg.h"
+#include "target_syssvc.h"
+
+#include "debug.h"
+#include "hci.h"
+#include "btstack_memory.h"
+#include "hci_dump.h"
+#include "l2cap.h"
+#include "sdp_parser.h"
+#include "sdp_client.h"
+#include "sdp_query_util.h"
+#include "sdp.h"
+#include "pan.h"
+#include "bt_main.h"
+#include "usb_hbth.h"
+
+//#define PACKET_DUMP
+
+// エラー返却用定数(-1:0xffff固定)
+#define FAILED_RFCOMM_ID_NOT_SET	0xffff
+
+#define RFCOMM_SERVER_CHANNEL 1
+static uint16_t  rfcomm_channel_id = FAILED_RFCOMM_ID_NOT_SET;
+
+static int record_id = -1;
+static uint16_t bnep_l2cap_psm = 0;
+static uint32_t bnep_remote_uuid = 0;
+static uint16_t bnep_version = 0;
+static uint16_t bnep_cid = 0;
+static bool_t bnep_do_connect = false;
+
+static uint16_t sdp_bnep_l2cap_psm = 0;
+static uint16_t sdp_bnep_version = 0;
+static uint32_t sdp_bnep_remote_uuid = 0;
+
+uint8_t   attribute_value[1000];
+const unsigned int attribute_value_buffer_size = sizeof(attribute_value);
+
+extern bd_addr_t remote_addr;
+
+uint8_t   spp_service_buffer[120];
+uint8_t   bnep_service_buffer[256];
+
+char bt_localname[] = TARGET_NAME"0000";
+
+volatile int bt_bnep_mode = 0;
+
+enum bt_state_t {
+	BT_STATE_DORMANT,
+	BT_STATE_POWER_ON,
+	BT_STATE_BNEP_QUERY,
+	BT_STATE_BNEP_WAIT,
+	BT_STATE_BNEP_QUERY_WAIT,
+	BT_STATE_CONNECTING,
+	BT_STATE_CONNECTED,
+};
+
+enum bt_state_t bt_state = BT_STATE_DORMANT;
+int bt_timer;
+
+// outgoing network packet
+const uint8_t * network_buffer;
+uint16_t network_buffer_len;
+uint16_t network_buffer_cid;
+
+/*************** PANU client routines *********************/
+
+char * get_string_from_data_element(uint8_t * element) {
+	de_size_t de_size = de_get_size_type(element);
+	int pos = de_get_header_size(element);
+	int len = 0;
+	switch (de_size) {
+	case DE_SIZE_VAR_8:
+		len = element[1];
+		break;
+	case DE_SIZE_VAR_16:
+		len = big_endian_read_16(element, 1);
+		break;
+	default:
+		break;
+	}
+	char * str = (char*)malloc(len + 1);
+	memcpy(str, &element[pos], len);
+	str[len] = '\0';
+	return str;
+}
+
+/* @section SDP parser callback
+*
+* @text The SDP parsers retrieves the BNEP PAN UUID as explained in
+* Section [on SDP BNEP Query example](#sec:sdpbnepqueryExample}.
+*/
+static void handle_sdp_client_record_complete(void)
+{
+	log_info("SDP BNEP Record complete");
+
+	// accept first entry or if we foudn a NAP and only have a PANU yet
+	if ((bnep_remote_uuid == 0) || (sdp_bnep_remote_uuid == BLUETOOTH_SERVICE_CLASS_NAP && bnep_remote_uuid == BLUETOOTH_SERVICE_CLASS_PANU)) {
+		bnep_l2cap_psm = sdp_bnep_l2cap_psm;
+		bnep_remote_uuid = sdp_bnep_remote_uuid;
+		bnep_version = sdp_bnep_version;
+	}
+}
+
+/* SDP parser callback */
+static void handle_sdp_client_query_result(sdp_query_event_t *event)
+{
+	sdp_query_attribute_value_event_t *value_event;
+	sdp_query_complete_event_t        *complete_event;
+	des_iterator_t des_list_it;
+	des_iterator_t prot_it;
+	char *str;
+
+	switch (event->type) {
+	case SDP_EVENT_QUERY_ATTRIBUTE_VALUE:
+		value_event = (sdp_query_attribute_value_event_t*)event;
+
+		// Handle new SDP record
+		if (value_event->record_id != record_id) {
+			handle_sdp_client_record_complete();
+			// next record started
+			record_id = value_event->record_id;
+			log_info("SDP Record: Nr: %d", record_id);
+		}
+
+		if (value_event->attribute_length <= attribute_value_buffer_size) {
+			attribute_value[value_event->data_offset] = value_event->data;
+
+			if ((uint16_t)(value_event->data_offset + 1) == value_event->attribute_length) {
+				//printf("SDP Attribute Data:");
+				//printf_hexdump(attribute_value, value_event->attribute_length);
+
+				switch (value_event->attribute_id) {
+				case BLUETOOTH_ATTRIBUTE_SERVICE_CLASS_ID_LIST:
+					if (de_get_element_type(attribute_value) != DE_DES) break;
+					for (des_iterator_init(&des_list_it, attribute_value); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)) {
+						uint8_t * element = des_iterator_get_element(&des_list_it);
+						if (de_get_element_type(element) != DE_UUID) continue;
+						uint32_t uuid = de_get_uuid32(element);
+						switch (uuid) {
+						case BLUETOOTH_SERVICE_CLASS_PANU:
+						case BLUETOOTH_SERVICE_CLASS_NAP:
+						case BLUETOOTH_SERVICE_CLASS_GN:
+							log_info("SDP Attribute 0x%04x: BNEP PAN protocol UUID: %04x", value_event->attribute_id, uuid);
+							sdp_bnep_remote_uuid = uuid;
+							break;
+						default:
+							log_info("SDP Attribute 0x%04x: UUID: %04x", value_event->attribute_id, uuid);
+							break;
+						}
+					}
+					break;
+					// 0x0100 "Service Name"
+				case 0x0100:
+					// 0x0101 "Service Description"
+				case 0x0101:
+					str = get_string_from_data_element(attribute_value);
+					log_info("SDP Attribute: 0x%04x: %s", value_event->attribute_id, str);
+					free(str);
+					break;
+				case BLUETOOTH_ATTRIBUTE_PROTOCOL_DESCRIPTOR_LIST: {
+					log_info("SDP Attribute: 0x%04x", value_event->attribute_id);
+
+					for (des_iterator_init(&des_list_it, attribute_value); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)) {
+						uint8_t       *des_element;
+						uint8_t       *element;
+						uint32_t       uuid;
+
+						if (des_iterator_get_type(&des_list_it) != DE_DES) continue;
+
+						des_element = des_iterator_get_element(&des_list_it);
+						des_iterator_init(&prot_it, des_element);
+						element = des_iterator_get_element(&prot_it);
+
+						if (de_get_element_type(element) != DE_UUID) continue;
+
+						uuid = de_get_uuid32(element);
+						switch (uuid) {
+						case BLUETOOTH_PROTOCOL_L2CAP:
+							if (!des_iterator_has_more(&prot_it)) continue;
+							des_iterator_next(&prot_it);
+							de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_bnep_l2cap_psm);
+							break;
+						case BLUETOOTH_PROTOCOL_BNEP:
+							if (!des_iterator_has_more(&prot_it)) continue;
+							des_iterator_next(&prot_it);
+							de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_bnep_version);
+							break;
+						default:
+							log_info("uuid 0x%04x", uuid);
+							break;
+						}
+					}
+					log_info("Summary: uuid 0x%04x, l2cap_psm 0x%04x, bnep_version 0x%04x", sdp_bnep_remote_uuid, sdp_bnep_l2cap_psm, sdp_bnep_version);
+					break;
+				}
+				default:
+					break;
+				}
+			}
+		}
+		else {
+			log_error("SDP attribute value buffer size exceeded: available %d, required %d", attribute_value_buffer_size, value_event->attribute_length);
+		}
+		break;
+
+	case SDP_EVENT_QUERY_COMPLETE:
+		handle_sdp_client_record_complete();
+		complete_event = (sdp_query_complete_event_t*)event;
+		log_error("General query done with status %d, bnep psm %04x.", complete_event->status, bnep_l2cap_psm);
+		if (bnep_l2cap_psm) {
+			bnep_do_connect = complete_event->status == 0;
+		}
+		else {
+			bnep_do_connect = false;
+			log_error("No BNEP service found");
+		}
+		if (!bnep_do_connect) {
+			// 20秒後 BNEP Query 開始
+			bt_state = BT_STATE_BNEP_QUERY_WAIT;
+			bt_timer = 20 * 1000;
+		}
+		break;
+	}
+}
+
+static void packet_handler(void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)
+{
+	uint8_t   event;
+	bd_addr_t event_addr;
+	uint8_t   rfcomm_channel_nr;
+	uint16_t  uuid_source;
+	uint16_t  uuid_dest;
+	uint16_t  mtu;
+
+	switch (packet_type) {
+	case HCI_EVENT_PACKET:
+		event = packet[0];
+		switch (event) {
+		case BTSTACK_EVENT_STATE:
+			/* BT Stack activated, get started */
+			if (packet[2] == HCI_STATE_WORKING) {
+				hci_send_cmd(&hci_write_local_name, bt_localname);
+				if (bt_bnep_mode == 0) {
+					// 即時 BNEP Query 開始
+					bt_state = BT_STATE_BNEP_QUERY_WAIT;
+					bt_timer = 0;
+				}
+				else {
+					bt_state = BT_STATE_BNEP_WAIT;
+					bt_timer = -1;
+				}
+			}
+			break;
+
+		case BTSTACK_EVENT_NR_CONNECTIONS_CHANGED:
+			if ((packet[2] == 0) && bnep_do_connect) {
+				bnep_do_connect = false;
+				/* Create BNEP connection */
+				bnep_connect(NULL, &remote_addr, bnep_l2cap_psm, bnep_remote_uuid);
+			}
+			break;
+
+		case HCI_EVENT_COMMAND_COMPLETE:
+			if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_read_bd_addr)) {
+				reverse_bd_addr(&packet[6], event_addr);
+				log_info("BD-ADDR: %s", bd_addr_to_str(event_addr));
+
+				snprintf(bt_localname, sizeof(bt_localname), TARGET_NAME"%04x", ((event_addr[4] << 8) | event_addr[5]));
+				gap_set_local_name(bt_localname);
+				break;
+			}
+			if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_write_local_name)) {
+				gap_discoverable_control(1);
+				break;
+			}
+			break;
+
+		case HCI_EVENT_LINK_KEY_REQUEST:
+			// deny link key request
+			log_info("Link key request");
+			reverse_bd_addr(&packet[2], event_addr);
+			hci_send_cmd(&hci_link_key_request_negative_reply, &event_addr);
+			break;
+
+		case HCI_EVENT_PIN_CODE_REQUEST:
+			// inform about pin code request
+			log_info("Pin code request - using '0000'");
+			reverse_bd_addr(&packet[2], event_addr);
+			hci_send_cmd(&hci_pin_code_request_reply, &event_addr, 4, "0000");
+			break;
+
+		case HCI_EVENT_USER_CONFIRMATION_REQUEST:
+			// inform about user confirmation request
+			log_info("HCI User Confirmation Request with numeric value '%06u'", little_endian_read_32(packet, 8));
+			log_info("HCI User Confirmation Auto accept");
+			break;
+
+		case RFCOMM_EVENT_INCOMING_CONNECTION:
+			// data: event (8), len(8), address(48), channel (8), rfcomm_cid (16)
+			reverse_bd_addr(&packet[2], event_addr);
+			rfcomm_channel_nr = packet[8];
+			rfcomm_channel_id = little_endian_read_16(packet, 9);
+			log_info("RFCOMM channel %u requested for %s", rfcomm_channel_nr, bd_addr_to_str(event_addr));
+			rfcomm_accept_connection_internal(rfcomm_channel_id);
+			break;
+
+		case RFCOMM_EVENT_OPEN_CHANNEL_COMPLETE:
+			// data: event(8), len(8), status (8), address (48), server channel(8), rfcomm_cid(16), max frame size(16)
+			if (packet[2]) {
+				log_info("RFCOMM channel open failed, status %u", packet[2]);
+			}
+			else {
+				rfcomm_channel_id = little_endian_read_16(packet, 12);
+				mtu = little_endian_read_16(packet, 14);
+				log_info("RFCOMM channel open succeeded. New RFCOMM Channel ID %u, max frame size %u", rfcomm_channel_id, mtu);
+			}
+			break;
+
+		case RFCOMM_EVENT_CHANNEL_CLOSED:
+			log_info("RFCOMM channel closed");
+			rfcomm_channel_id = 0;
+			break;
+
+		case BNEP_EVENT_OPEN_CHANNEL_COMPLETE:
+			if (packet[2]) {
+				log_info("BNEP channel open failed, status %02x", packet[2]);
+
+				// 30秒後 BNEP Query 開始
+				bt_state = BT_STATE_BNEP_QUERY_WAIT;
+				bt_timer = 30 * 1000;
+			}
+			else {
+				// data: event(8), len(8), status (8), bnep source uuid (16), bnep destination uuid (16), remote_address (48)
+				bnep_cid = little_endian_read_16(packet, 3);
+				uuid_source = little_endian_read_16(packet, 5);
+				uuid_dest = little_endian_read_16(packet, 7);
+				mtu = little_endian_read_16(packet, 9);
+				//reverse_bd_addr(&packet[11], remote_addr); 
+				memcpy(&remote_addr, &packet[11], sizeof(bd_addr_t));
+				log_info("BNEP connection open succeeded to %s source UUID 0x%04x dest UUID: 0x%04x, max frame size %u", bd_addr_to_str(event_addr), uuid_source, uuid_dest, mtu);
+				/* Setup network interface */
+				btstack_network_up(bnep_cid, (uint8_t *)hci_local_bd_addr(), (uint8_t *)remote_addr);
+				log_info("Network Interface %s activated", btstack_network_get_name(bnep_cid));
+
+				bt_state = BT_STATE_CONNECTED;
+				bt_timer = -1;
+			}
+			break;
+
+		case BNEP_EVENT_CHANNEL_TIMEOUT:
+			log_info("BNEP channel timeout! Channel will be closed");
+			break;
+
+		case BNEP_EVENT_CHANNEL_CLOSED:
+			bnep_cid = little_endian_read_16(packet, 2);
+			bt_channel_closed(bnep_cid);
+
+			// 30秒後 BNEP Query 開始
+			bt_state = BT_STATE_BNEP_QUERY_WAIT;
+			bt_timer = 30 * 1000;
+			break;
+
+		case BNEP_EVENT_READY_TO_SEND:
+			bnep_cid = little_endian_read_16(packet, 2);
+			bt_send_packet(bnep_cid);
+			break;
+
+		default:
+			break;
+		}
+		break;
+
+	case RFCOMM_DATA_PACKET:
+		// loopback
+		if (rfcomm_channel_id) {
+			int err = rfcomm_send_internal(rfcomm_channel_id, packet, size);
+			if (err) {
+				log_error("rfcomm_send_internal -> error %d", err);
+			}
+		}
+		break;
+
+	case BNEP_DATA_PACKET:
+		bt_recv_packet(channel, packet, size);
+		break;
+
+	default:
+		break;
+	}
+}
+
+/*
+ * @section Network packet handler
+ *
+ * @text A pointer to the network packet is stored and a BNEP_EVENT_CAN_SEND_NOW requested
+ */
+
+ /* LISTING_START(networkPacketHandler): Network Packet Handler */
+static void network_send_packet_callback(uint16_t bnep_cid, const uint8_t * packet, uint16_t size) {
+	if ((bnep_cid == 0) || (network_buffer_len > 0)) {
+#ifdef PACKET_DUMP
+		int len = size;
+		printf("DROP %04x %d ", bnep_cid, size);
+		if (len > 128)
+			len = 128;
+		printf_hexdump(packet, len);
+#endif
+		if (network_buffer_len > 0) {
+			network_buffer_len = 0;
+			btstack_network_packet_sent(network_buffer_cid);
+		}
+	}
+
+	network_buffer_cid = bnep_cid;
+	network_buffer = packet;
+	network_buffer_len = size;
+}
+
+void bt_init(void)
+{
+	const hci_transport_t *transport;
+	bt_control_t       * control;
+	hci_uart_config_t  * config;
+	remote_device_db_t * remote_db;
+	service_record_item_t *spp_service_record_item;
+	service_record_item_t *bnep_service_record_item;
+
+	btstack_network_init(&network_send_packet_callback);
+
+	//hci_dump_open("", HCI_DUMP_PACKETLOGGER);
+
+	// start with BTstack init - especially configure HCI Transport
+	btstack_memory_init();
+	run_loop_init(RUN_LOOP_EMBEDDED);
+
+	/* Initialize HCI */
+	transport = hci_transport_usb_instance();
+	control = NULL;
+	config = NULL;
+	remote_db = (remote_device_db_t *)&remote_device_db_memory;
+	hci_init(transport, config, control, remote_db);
+	hci_set_class_of_device(0x820300/*0x820810*/);
+
+	/* Initialize L2CAP */
+	l2cap_init();
+	l2cap_register_packet_handler(packet_handler);
+
+	/* Initialise SDP, create record for SPP and register with SDP */
+	sdp_init();
+
+	/* Initialize RFCOMM */
+	rfcomm_init();
+	rfcomm_register_packet_handler(packet_handler);
+	rfcomm_register_service_internal(NULL, RFCOMM_SERVER_CHANNEL, 0xffff);  // reserved channel, mtu=100
+
+	/* Initialise BNEP */
+	bnep_init();
+	bnep_register_packet_handler(packet_handler);
+	if (bt_bnep_mode == 0) {
+		bnep_register_service(NULL, BLUETOOTH_SERVICE_CLASS_PANU, BNEP_MTU_MIN);  /* Minimum L2CAP MTU for bnep is 1691 bytes */
+	}
+	else {
+		bnep_register_service(NULL, BLUETOOTH_SERVICE_CLASS_NAP, BNEP_MTU_MIN);  /* Minimum L2CAP MTU for bnep is 1691 bytes */
+	}
+
+	memset(spp_service_buffer, 0, sizeof(spp_service_buffer));
+	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;
+
+	sdp_create_spp_service((uint8_t*)&spp_service_record_item->service_record, 1, "RX SPP");
+	de_dump_data_element((uint8_t*)spp_service_record_item->service_record);
+	log_info("SSP SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)spp_service_record_item->service_record)));
+	sdp_register_service_internal(NULL, spp_service_record_item);
+
+	if (bt_bnep_mode == 0) {
+		pan_create_panu_service((uint8_t*)&bnep_service_record_item->service_record, "RX PANU", "RX PANU", BNEP_SECURITY_NONE);
+		de_dump_data_element((uint8_t*)bnep_service_record_item->service_record);
+		log_info("PANU SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)bnep_service_record_item->service_record)));
+	}
+	else {
+		pan_create_nap_service((uint8_t*)&bnep_service_record_item->service_record, "RX NAP", "RX NAP", BNEP_SECURITY_NONE,
+			PAN_NET_ACCESS_TYPE_100MB_ETHERNET, 0x0001312D0/*10Mb/sec*/, NULL, NULL);
+		de_dump_data_element((uint8_t*)bnep_service_record_item->service_record);
+		log_info("NAP SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)bnep_service_record_item->service_record)));
+	}
+	sdp_register_service_internal(NULL, bnep_service_record_item);
+
+	// Secure Simple Pairing configuration -> just works
+	hci_ssp_set_enable(1);
+	hci_ssp_set_io_capability(SSP_IO_CAPABILITY_NO_INPUT_NO_OUTPUT);
+	hci_ssp_set_auto_accept(1);
+
+	/* Turn on the device */
+	hci_power_control(HCI_POWER_ON);
+
+	/* Initialise SDP */
+	sdp_parser_init();
+	sdp_parser_register_callback(handle_sdp_client_query_result);
+
+	bt_state = BT_STATE_POWER_ON;
+	bt_timer = -1;
+}
+
+void bt_process(void)
+{
+	if (bt_state != BT_STATE_DORMANT) {
+		run_loop_execute();
+		bt_send_packet(0xffff);
+	}
+
+	if (bt_timer != 0)
+		return;
+
+	switch (bt_state) {
+	case BT_STATE_BNEP_QUERY_WAIT:
+		/* Send a general query for BNEP Protocol ID */
+		log_info("Start SDP BNEP query.");
+		sdp_general_query_for_uuid(remote_addr, BLUETOOTH_PROTOCOL_BNEP);
+
+		bt_state = BT_STATE_BNEP_QUERY;
+		bt_timer = -1;
+		break;
+	default:
+		bt_timer = -1;
+		break;
+	}
+}
+
+int bt_can_send_packet(void)
+{
+	return network_buffer_len == 0;
+}
+
+void bt_send_packet(uint16_t bnep_cid)
+{
+	if (network_buffer_len > 0) {
+		if (network_buffer_cid == 0) {
+			network_buffer_len = 0;
+			btstack_network_packet_sent(network_buffer_cid);
+			return;
+		}
+		/* Check for parked network packets and send it out now */
+		if (bnep_can_send_packet_now(network_buffer_cid)) {
+			uint16_t len = network_buffer_len;
+#ifdef PACKET_DUMP
+			printf("ETH %u => ", len);
+			if (len > 128)
+				len = 128;
+			printf_hexdump(network_buffer, len);
+#endif
+			// この関数はbnep_sendから再帰呼び出しされるので、
+			// bnep_sendを呼び出すより前に送信パケットなし状態にします。
+			network_buffer_len = 0;
+			bnep_send(network_buffer_cid, (uint8_t*)network_buffer, len);
+			btstack_network_packet_sent(network_buffer_cid);
+		}
+	}
+}
+
+void bt_recv_packet(uint16_t bnep_cid, const uint8_t * packet, uint16_t size)
+{
+#ifdef PACKET_DUMP
+	int len = size;
+	printf("ETH %d <= ", size);
+	if (len > 128)
+		len = 128;
+	printf_hexdump(packet, len);
+#endif
+	btstack_network_process_packet(bnep_cid, packet, size);
+}
+
+void bt_channel_closed(uint16_t bnep_cid)
+{
+	log_info("BNEP channel closed");
+	btstack_network_down(bnep_cid);
+	if ((network_buffer_len > 0) && (network_buffer_cid == bnep_cid)) {
+		network_buffer_len = 0;
+		btstack_network_packet_sent(network_buffer_cid);
+	}
+}
+
+void bt_terminate(void)
+{
+	hci_close();
+
+	bt_state = BT_STATE_DORMANT;
+	bt_timer = -1;
+}
+
+void bt_task_on_start(struct task_if_t *task, ID tskid)
+{
+}
+
+void bt_task_on_end(struct task_if_t *task)
+{
+}
+
+int bt_task_get_timer(struct task_if_t *task)
+{
+	return bt_timer;
+}
+
+void bt_task_progress(struct task_if_t *task, int elapse)
+{
+	if (bt_timer == -1)
+		return;
+
+	bt_timer -= elapse;
+	if (bt_timer < 0)
+		bt_timer = 0;
+}
+
+void bt_task_process(struct task_if_t *task, enum task_event_t event)
+{
+	extern void hal_tick_handler();
+
+	switch (event & ~TASK_EVENT_TICK) {
+	case TASK_EVENT_START:
+		bt_init();
+		break;
+	case TASK_EVENT_TERMINATE:
+		bt_terminate();
+		break;
+	case TASK_EVENT_WAKEUP:
+	case TASK_EVENT_TIMEOUT:
+		if (event & TASK_EVENT_TICK)
+			hal_tick_handler();
+		bt_process();
+		break;
+	}
+}
+
+struct task_if_t bt_task = {
+	bt_task_on_start,
+	bt_task_on_end,
+	bt_task_get_timer,
+	bt_task_progress,
+	bt_task_process,
+};
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.h	(revision 374)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.h	(revision 374)
@@ -0,0 +1,34 @@
+/*
+ * bt_main.h
+ *
+ */
+#ifndef __BT_MAIN_
+#define __BT_MAIN_
+
+#if defined __cplusplus
+extern "C" {
+#endif
+
+// エラー返却用定数(-1:0xffff固定)
+#define FAILED_RFCOMM_ID_NOT_SET	0xffff
+
+#define RFCOMM_SERVER_CHANNEL 1
+
+void bt_init(void);
+int bt_can_send_packet(void);
+void bt_send_packet(uint16_t bnep_cid);
+void bt_recv_packet(uint16_t bnep_cid, const uint8_t * packet, uint16_t size);
+void bt_channel_closed(uint16_t bnep_cid);
+void bt_terminate(void);
+
+void btstack_network_init(void (*send_packet_callback)(uint16_t bnep_cid, const uint8_t * packet, uint16_t size));
+void btstack_network_up(uint16_t bnep_cid, bd_addr_t local_addr, bd_addr_t remote_addr);
+const char * btstack_network_get_name(uint16_t bnep_cid);
+int btstack_network_down(uint16_t bnep_cid);
+void btstack_network_process_packet(uint16_t bnep_cid, const uint8_t * packet, uint16_t size);
+void btstack_network_packet_sent(uint16_t bnep_cid);
+
+#if defined __cplusplus
+}
+#endif
+#endif
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.c	(revision 364)
+++ asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.c	(revision 374)
@@ -79,5 +79,5 @@
 #include "kernel/kernel_impl.h"
 #include "btstack/utils.h"
-#include "panu_main.h"
+#include "bt_main.h"
 #include "usb_hbth.h"
 //#include "hal_cpu.h"
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/nap_main.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/nap_main.c	(revision 364)
+++ 	(revision )
@@ -1,447 +1,0 @@
-/*
- * Copyright (C) 2014 BlueKitchen GmbH
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- * 4. Any redistribution, use, or modification is done solely for
- *    personal benefit and not for any commercial purpose or for
- *    monetary gain.
- *
- * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
- * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Please inquire about commercial licensing options at
- * contact@bluekitchen-gmbh.com
- *
- */
-
-#include "btstack-config.h"
-
-#include <stdint.h>
-
-#include <btstack/hci_cmds.h>
-#include <btstack/run_loop.h>
-#include <btstack/sdp_util.h>
-
-#include <kernel.h>
-#include "kernel_cfg.h"
-#include "target_syssvc.h"
-
-#include "debug.h"
-#include "hci.h"
-#include "btstack_memory.h"
-#include "hci_dump.h"
-#include "l2cap.h"
-#include "sdp_parser.h"
-#include "sdp_client.h"
-#include "sdp_query_util.h"
-#include "sdp.h"
-#include "pan.h"
-#include "panu_main.h"
-
-extern uint16_t  rfcomm_channel_id;
-
-static int record_id = -1;
-static uint16_t bnep_l2cap_psm = 0;
-static uint32_t bnep_remote_uuid = 0;
-static uint16_t bnep_version = 0;
-static uint16_t bnep_cid = 0;
-static bool_t bnep_do_connect = false;
-
-static uint16_t sdp_bnep_l2cap_psm = 0;
-static uint16_t sdp_bnep_version = 0;
-static uint32_t sdp_bnep_remote_uuid = 0;
-
-extern uint8_t   attribute_value[];
-extern const unsigned int attribute_value_buffer_size;
-
-static bd_addr_t remote_addr;
-
-extern uint8_t   spp_service_buffer[120];
-extern uint8_t   bnep_service_buffer[256];
-
-extern char bt_localname[sizeof(TARGET_NAME"0000")];
-
-/*************** NAP server routines *********************/
-
-char * get_string_from_data_element(uint8_t * element);
-
-/* @section SDP parser callback
-*
-* @text The SDP parsers retrieves the BNEP PAN UUID as explained in
-* Section [on SDP BNEP Query example](#sec:sdpbnepqueryExample}.
-*/
-static void handle_sdp_client_record_complete(void)
-{
-	log_info("SDP BNEP Record complete");
-
-	// accept first entry or if we foudn a PANU and only have a NAP yet
-	if ((bnep_remote_uuid == 0) || (sdp_bnep_remote_uuid == BNEP_UUID_PANU && bnep_remote_uuid == BNEP_UUID_NAP)) {
-		bnep_l2cap_psm = sdp_bnep_l2cap_psm;
-		bnep_remote_uuid = sdp_bnep_remote_uuid;
-		bnep_version = sdp_bnep_version;
-	}
-}
-
-/* SDP parser callback */
-static void handle_sdp_client_query_result(sdp_query_event_t *event)
-{
-	sdp_query_attribute_value_event_t *value_event;
-	sdp_query_complete_event_t        *complete_event;
-	des_iterator_t des_list_it;
-	des_iterator_t prot_it;
-	char *str;
-
-	switch (event->type) {
-	case SDP_QUERY_ATTRIBUTE_VALUE:
-		value_event = (sdp_query_attribute_value_event_t*)event;
-
-		// Handle new SDP record
-		if (value_event->record_id != record_id) {
-			handle_sdp_client_record_complete();
-			// next record started
-			record_id = value_event->record_id;
-			log_info("SDP Record: Nr: %d", record_id);
-		}
-
-		if (value_event->attribute_length <= attribute_value_buffer_size) {
-			attribute_value[value_event->data_offset] = value_event->data;
-
-			if ((uint16_t)(value_event->data_offset + 1) == value_event->attribute_length) {
-				//printf("SDP Attribute Data:");
-				//printf_hexdump(attribute_value, value_event->attribute_length);
-
-				switch (value_event->attribute_id) {
-				case SDP_ServiceClassIDList:
-					if (de_get_element_type(attribute_value) != DE_DES) break;
-					for (des_iterator_init(&des_list_it, attribute_value); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)) {
-						uint8_t * element = des_iterator_get_element(&des_list_it);
-						if (de_get_element_type(element) != DE_UUID) continue;
-						uint32_t uuid = de_get_uuid32(element);
-						switch (uuid) {
-						case BNEP_UUID_PANU:
-						case BNEP_UUID_NAP:
-						case BNEP_UUID_GN:
-							log_info("SDP Attribute 0x%04x: BNEP PAN protocol UUID: %04x", value_event->attribute_id, uuid);
-							sdp_bnep_remote_uuid = uuid;
-							break;
-						default:
-							log_info("SDP Attribute 0x%04x: UUID: %04x", value_event->attribute_id, uuid);
-							break;
-						}
-					}
-					break;
-					// 0x0100 "Service Name"
-				case 0x0100:
-					// 0x0101 "Service Description"
-				case 0x0101:
-					str = get_string_from_data_element(attribute_value);
-					log_info("SDP Attribute: 0x%04x: %s", value_event->attribute_id, str);
-					free(str);
-					break;
-				case SDP_ProtocolDescriptorList: {
-					log_info("SDP Attribute: 0x%04x", value_event->attribute_id);
-
-					for (des_iterator_init(&des_list_it, attribute_value); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)) {
-						uint8_t       *des_element;
-						uint8_t       *element;
-						uint32_t       uuid;
-
-						if (des_iterator_get_type(&des_list_it) != DE_DES) continue;
-
-						des_element = des_iterator_get_element(&des_list_it);
-						des_iterator_init(&prot_it, des_element);
-						element = des_iterator_get_element(&prot_it);
-
-						if (de_get_element_type(element) != DE_UUID) continue;
-
-						uuid = de_get_uuid32(element);
-						switch (uuid) {
-						case SDP_L2CAPProtocol:
-							if (!des_iterator_has_more(&prot_it)) continue;
-							des_iterator_next(&prot_it);
-							de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_bnep_l2cap_psm);
-							break;
-						case SDP_BNEPProtocol:
-							if (!des_iterator_has_more(&prot_it)) continue;
-							des_iterator_next(&prot_it);
-							de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_bnep_version);
-							break;
-						default:
-							log_info("uuid 0x%04x", uuid);
-							break;
-						}
-					}
-					log_info("Summary: uuid 0x%04x, l2cap_psm 0x%04x, bnep_version 0x%04x", sdp_bnep_remote_uuid, sdp_bnep_l2cap_psm, sdp_bnep_version);
-					break;
-				}
-				default:
-					break;
-				}
-			}
-		}
-		else {
-			log_error("SDP attribute value buffer size exceeded: available %d, required %d", attribute_value_buffer_size, value_event->attribute_length);
-		}
-		break;
-
-	case SDP_QUERY_COMPLETE:
-		handle_sdp_client_record_complete();
-		complete_event = (sdp_query_complete_event_t*)event;
-		log_error("General query done with status %d, bnep psm %04x.", complete_event->status, bnep_l2cap_psm);
-		if (bnep_l2cap_psm) {
-			bnep_do_connect = complete_event->status == 0;
-		}
-		else {
-			log_error("No BNEP service found");
-		}
-		break;
-	}
-}
-
-static void packet_handler(void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)
-{
-	uint8_t   event;
-	bd_addr_t event_addr;
-	uint8_t   rfcomm_channel_nr;
-	uint16_t  uuid_source;
-	uint16_t  uuid_dest;
-	uint16_t  mtu;
-
-	switch (packet_type) {
-	case HCI_EVENT_PACKET:
-		event = packet[0];
-		switch (event) {
-		case BTSTACK_EVENT_STATE:
-			/* BT Stack activated, get started */
-			if (packet[2] == HCI_STATE_WORKING) {
-				hci_send_cmd(&hci_write_local_name, bt_localname);
-			}
-			break;
-
-		case BTSTACK_EVENT_NR_CONNECTIONS_CHANGED:
-			if ((packet[2] == 0) && bnep_do_connect) {
-				bnep_do_connect = false;
-				/* Create BNEP connection */
-				bnep_connect(NULL, &remote_addr, bnep_l2cap_psm, bnep_remote_uuid);
-			}
-			break;
-
-		case HCI_EVENT_COMMAND_COMPLETE:
-			if (COMMAND_COMPLETE_EVENT(packet, hci_read_bd_addr)) {
-				bt_flip_addr(event_addr, &packet[6]);
-				log_info("BD-ADDR: %s", bd_addr_to_str(event_addr));
-
-				snprintf(bt_localname, sizeof(bt_localname), TARGET_NAME"%04x", ((event_addr[4] << 8) | event_addr[5]));
-				gap_set_local_name(bt_localname);
-				break;
-			}
-			if (COMMAND_COMPLETE_EVENT(packet, hci_write_local_name)) {
-				hci_discoverable_control(1);
-				break;
-			}
-			break;
-
-		case HCI_EVENT_LINK_KEY_REQUEST:
-			// deny link key request
-			log_info("Link key request");
-			bt_flip_addr(event_addr, &packet[2]);
-			hci_send_cmd(&hci_link_key_request_negative_reply, &event_addr);
-			break;
-
-		case HCI_EVENT_PIN_CODE_REQUEST:
-			// inform about pin code request
-			log_info("Pin code request - using '0000'");
-			bt_flip_addr(event_addr, &packet[2]);
-			hci_send_cmd(&hci_pin_code_request_reply, &event_addr, 4, "0000");
-			break;
-
-		case HCI_EVENT_USER_CONFIRMATION_REQUEST:
-			// inform about user confirmation request
-			log_info("HCI User Confirmation Request with numeric value '%06u'", READ_BT_32(packet, 8));
-			log_info("HCI User Confirmation Auto accept");
-			break;
-
-		case RFCOMM_EVENT_INCOMING_CONNECTION:
-			// data: event (8), len(8), address(48), channel (8), rfcomm_cid (16)
-			bt_flip_addr(event_addr, &packet[2]);
-			rfcomm_channel_nr = packet[8];
-			rfcomm_channel_id = READ_BT_16(packet, 9);
-			log_info("RFCOMM channel %u requested for %s", rfcomm_channel_nr, bd_addr_to_str(event_addr));
-			rfcomm_accept_connection_internal(rfcomm_channel_id);
-			break;
-
-		case RFCOMM_EVENT_OPEN_CHANNEL_COMPLETE:
-			// data: event(8), len(8), status (8), address (48), server channel(8), rfcomm_cid(16), max frame size(16)
-			if (packet[2]) {
-				log_info("RFCOMM channel open failed, status %u", packet[2]);
-			}
-			else {
-				rfcomm_channel_id = READ_BT_16(packet, 12);
-				mtu = READ_BT_16(packet, 14);
-				log_info("RFCOMM channel open succeeded. New RFCOMM Channel ID %u, max frame size %u", rfcomm_channel_id, mtu);
-			}
-			break;
-
-		case RFCOMM_EVENT_CHANNEL_CLOSED:
-			log_info("RFCOMM channel closed");
-			rfcomm_channel_id = 0;
-			break;
-
-		case BNEP_EVENT_OPEN_CHANNEL_COMPLETE:
-			if (packet[2]) {
-				log_info("BNEP channel open failed, status %02x", packet[2]);
-			}
-			else {
-				// data: event(8), len(8), status (8), bnep source uuid (16), bnep destination uuid (16), remote_address (48)
-				bnep_cid = READ_BT_16(packet, 3);
-				uuid_source = READ_BT_16(packet, 5);
-				uuid_dest = READ_BT_16(packet, 7);
-				mtu = READ_BT_16(packet, 9);
-				//bt_flip_addr(remote_addr, &packet[11]); 
-				memcpy(&remote_addr, &packet[11], sizeof(bd_addr_t));
-				log_info("BNEP connection open succeeded to %s source UUID 0x%04x dest UUID: 0x%04x, max frame size %u", bd_addr_to_str(event_addr), uuid_source, uuid_dest, mtu);
-				/* Setup network interface */
-				btstack_network_up(bnep_cid, (uint8_t *)hci_local_bd_addr(), remote_addr);
-				log_info("Network Interface %s activated", btstack_network_get_name(bnep_cid));
-			}
-			break;
-
-		case BNEP_EVENT_CHANNEL_TIMEOUT:
-			log_info("BNEP channel timeout! Channel will be closed");
-			break;
-
-		case BNEP_EVENT_CHANNEL_CLOSED:
-			bnep_cid = READ_BT_16(packet, 2);
-			bt_channel_closed(bnep_cid);
-			break;
-
-		case BNEP_EVENT_READY_TO_SEND:
-			bnep_cid = READ_BT_16(packet, 2);
-			bt_send_packet(bnep_cid);
-			break;
-
-		default:
-			break;
-		}
-		break;
-
-	case RFCOMM_DATA_PACKET:
-		// loopback
-		if (rfcomm_channel_id) {
-			int err = rfcomm_send_internal(rfcomm_channel_id, packet, size);
-			if (err) {
-				log_error("rfcomm_send_internal -> error %d", err);
-			}
-		}
-		break;
-
-	case BNEP_DATA_PACKET:
-		bt_recv_packet(channel, packet, size);
-		break;
-
-	default:
-		break;
-	}
-}
-
-void nap_init(void)
-{
-	const hci_transport_t *transport;
-	bt_control_t       * control;
-	hci_uart_config_t  * config;
-	remote_device_db_t * remote_db;
-	service_record_item_t *spp_service_record_item;
-	service_record_item_t *bnep_service_record_item;
-
-	//hci_dump_open("", HCI_DUMP_PACKETLOGGER);
-
-	log_info("bt初期化...");
-
-	// start with BTstack init - especially configure HCI Transport
-	btstack_memory_init();
-	run_loop_init(RUN_LOOP_EMBEDDED);
-
-	/* Initialize HCI */
-	log_info("HCI初期化...");
-	transport = hci_transport_usb_instance();
-	control = NULL;
-	config = NULL;
-	remote_db = (remote_device_db_t *)&remote_device_db_memory;
-	hci_init(transport, config, control, remote_db);
-	hci_set_class_of_device(0x820300/*0x820810*/);
-
-	/* Initialize L2CAP */
-	log_info("L2CAP初期化...");
-	l2cap_init();
-	l2cap_register_packet_handler(packet_handler);
-
-	/* Initialise SDP, create record for SPP and register with SDP */
-	log_info("SDP初期化...");
-	sdp_init();
-
-	/* Initialize RFCOMM */
-	log_info("RFCOMM初期化...");
-	rfcomm_init();
-	rfcomm_register_packet_handler(packet_handler);
-	rfcomm_register_service_internal(NULL, RFCOMM_SERVER_CHANNEL, 0xffff);  // reserved channel, mtu=100
-
-	/* Initialise BNEP */
-	log_info("BNEP初期化...");
-	bnep_init();
-	bnep_register_packet_handler(packet_handler);
-	bnep_register_service(NULL, BNEP_UUID_NAP, BNEP_MTU_MIN);  /* Minimum L2CAP MTU for bnep is 1691 bytes */
-
-	memset(spp_service_buffer, 0, sizeof(spp_service_buffer));
-	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;
-
-	log_info("SPPサービス登録...");
-	sdp_create_spp_service((uint8_t*)&spp_service_record_item->service_record, 1, "RX SPP");
-	de_dump_data_element((uint8_t*)spp_service_record_item->service_record);
-	log_info("SSP SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)spp_service_record_item->service_record)));
-	sdp_register_service_internal(NULL, spp_service_record_item);
-
-	log_info("BNEPサービス登録...");
-	pan_create_nap_service((uint8_t*)&bnep_service_record_item->service_record, "RX NAP", "RX NAP", BNEP_SECURITY_NONE,
-		PAN_NET_ACCESS_TYPE_100MB_ETHERNET, 0x0001312D0/*10Mb/sec*/, NULL, NULL);
-	de_dump_data_element((uint8_t*)bnep_service_record_item->service_record);
-	log_info("NAP SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)bnep_service_record_item->service_record)));
-	sdp_register_service_internal(NULL, bnep_service_record_item);
-
-	// Secure Simple Pairing configuration -> just works
-	hci_ssp_set_enable(1);
-	hci_ssp_set_io_capability(SSP_IO_CAPABILITY_NO_INPUT_NO_OUTPUT);
-	hci_ssp_set_auto_accept(1);
-
-	/* Turn on the device */
-	log_info("HCI電源ON...");
-	hci_power_control(HCI_POWER_ON);
-
-	/* Initialise SDP */
-	sdp_parser_init();
-	sdp_parser_register_callback(handle_sdp_client_query_result);
-}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/panu_main.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/panu_main.c	(revision 364)
+++ 	(revision )
@@ -1,595 +1,0 @@
-/*
- * Copyright (C) 2014 BlueKitchen GmbH
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- * 4. Any redistribution, use, or modification is done solely for
- *    personal benefit and not for any commercial purpose or for
- *    monetary gain.
- *
- * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
- * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Please inquire about commercial licensing options at
- * contact@bluekitchen-gmbh.com
- *
- */
-
-#include "btstack-config.h"
-
-#include <stdint.h>
-
-#include <btstack/hci_cmds.h>
-#include <btstack/run_loop.h>
-#include <btstack/sdp_util.h>
-
-#include <kernel.h>
-#include "kernel_cfg.h"
-#include "target_syssvc.h"
-
-#include "debug.h"
-#include "hci.h"
-#include "btstack_memory.h"
-#include "hci_dump.h"
-#include "l2cap.h"
-#include "sdp_parser.h"
-#include "sdp_client.h"
-#include "sdp_query_util.h"
-#include "sdp.h"
-#include "pan.h"
-#include "panu_main.h"
-
-//#define PACKET_DUMP
-
-// エラー返却用定数(-1:0xffff固定)
-#define FAILED_RFCOMM_ID_NOT_SET	0xffff
-
-#define RFCOMM_SERVER_CHANNEL 1
-/*static*/ uint16_t  rfcomm_channel_id = FAILED_RFCOMM_ID_NOT_SET;
-
-static int record_id = -1;
-static uint16_t bnep_l2cap_psm = 0;
-static uint32_t bnep_remote_uuid = 0;
-static uint16_t bnep_version = 0;
-static uint16_t bnep_cid = 0;
-static bool_t bnep_do_connect = false;
-
-static uint16_t sdp_bnep_l2cap_psm = 0;
-static uint16_t sdp_bnep_version = 0;
-static uint32_t sdp_bnep_remote_uuid = 0;
-
-uint8_t   attribute_value[1000];
-const unsigned int attribute_value_buffer_size = sizeof(attribute_value);
-
-extern bd_addr_t remote_addr;
-
-uint8_t   spp_service_buffer[120];
-uint8_t   bnep_service_buffer[256];
-
-char bt_localname[] = TARGET_NAME"0000";
-
-volatile int bt_bnep_mode = 0;
-bool_t bt_enabled = false;
-
-// outgoing network packet
-const uint8_t * network_buffer;
-uint16_t network_buffer_len;
-uint16_t network_buffer_cid;
-
-/*************** PANU client routines *********************/
-
-char * get_string_from_data_element(uint8_t * element) {
-	de_size_t de_size = de_get_size_type(element);
-	int pos = de_get_header_size(element);
-	int len = 0;
-	switch (de_size) {
-	case DE_SIZE_VAR_8:
-		len = element[1];
-		break;
-	case DE_SIZE_VAR_16:
-		len = READ_NET_16(element, 1);
-		break;
-	default:
-		break;
-	}
-	char * str = (char*)malloc(len + 1);
-	memcpy(str, &element[pos], len);
-	str[len] = '\0';
-	return str;
-}
-
-/* @section SDP parser callback
-*
-* @text The SDP parsers retrieves the BNEP PAN UUID as explained in
-* Section [on SDP BNEP Query example](#sec:sdpbnepqueryExample}.
-*/
-static void handle_sdp_client_record_complete(void)
-{
-	log_info("SDP BNEP Record complete");
-
-	// accept first entry or if we foudn a NAP and only have a PANU yet
-	if ((bnep_remote_uuid == 0) || (sdp_bnep_remote_uuid == BNEP_UUID_NAP && bnep_remote_uuid == BNEP_UUID_PANU)) {
-		bnep_l2cap_psm = sdp_bnep_l2cap_psm;
-		bnep_remote_uuid = sdp_bnep_remote_uuid;
-		bnep_version = sdp_bnep_version;
-	}
-}
-
-/* SDP parser callback */
-static void handle_sdp_client_query_result(sdp_query_event_t *event)
-{
-	sdp_query_attribute_value_event_t *value_event;
-	sdp_query_complete_event_t        *complete_event;
-	des_iterator_t des_list_it;
-	des_iterator_t prot_it;
-	char *str;
-
-	switch (event->type) {
-	case SDP_QUERY_ATTRIBUTE_VALUE:
-		value_event = (sdp_query_attribute_value_event_t*)event;
-
-		// Handle new SDP record
-		if (value_event->record_id != record_id) {
-			handle_sdp_client_record_complete();
-			// next record started
-			record_id = value_event->record_id;
-			log_info("SDP Record: Nr: %d", record_id);
-		}
-
-		if (value_event->attribute_length <= attribute_value_buffer_size) {
-			attribute_value[value_event->data_offset] = value_event->data;
-
-			if ((uint16_t)(value_event->data_offset + 1) == value_event->attribute_length) {
-				//printf("SDP Attribute Data:");
-				//printf_hexdump(attribute_value, value_event->attribute_length);
-
-				switch (value_event->attribute_id) {
-				case SDP_ServiceClassIDList:
-					if (de_get_element_type(attribute_value) != DE_DES) break;
-					for (des_iterator_init(&des_list_it, attribute_value); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)) {
-						uint8_t * element = des_iterator_get_element(&des_list_it);
-						if (de_get_element_type(element) != DE_UUID) continue;
-						uint32_t uuid = de_get_uuid32(element);
-						switch (uuid) {
-						case BNEP_UUID_PANU:
-						case BNEP_UUID_NAP:
-						case BNEP_UUID_GN:
-							log_info("SDP Attribute 0x%04x: BNEP PAN protocol UUID: %04x", value_event->attribute_id, uuid);
-							sdp_bnep_remote_uuid = uuid;
-							break;
-						default:
-							log_info("SDP Attribute 0x%04x: UUID: %04x", value_event->attribute_id, uuid);
-							break;
-						}
-					}
-					break;
-					// 0x0100 "Service Name"
-				case 0x0100:
-					// 0x0101 "Service Description"
-				case 0x0101:
-					str = get_string_from_data_element(attribute_value);
-					log_info("SDP Attribute: 0x%04x: %s", value_event->attribute_id, str);
-					free(str);
-					break;
-				case SDP_ProtocolDescriptorList: {
-					log_info("SDP Attribute: 0x%04x", value_event->attribute_id);
-
-					for (des_iterator_init(&des_list_it, attribute_value); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)) {
-						uint8_t       *des_element;
-						uint8_t       *element;
-						uint32_t       uuid;
-
-						if (des_iterator_get_type(&des_list_it) != DE_DES) continue;
-
-						des_element = des_iterator_get_element(&des_list_it);
-						des_iterator_init(&prot_it, des_element);
-						element = des_iterator_get_element(&prot_it);
-
-						if (de_get_element_type(element) != DE_UUID) continue;
-
-						uuid = de_get_uuid32(element);
-						switch (uuid) {
-						case SDP_L2CAPProtocol:
-							if (!des_iterator_has_more(&prot_it)) continue;
-							des_iterator_next(&prot_it);
-							de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_bnep_l2cap_psm);
-							break;
-						case SDP_BNEPProtocol:
-							if (!des_iterator_has_more(&prot_it)) continue;
-							des_iterator_next(&prot_it);
-							de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_bnep_version);
-							break;
-						default:
-							log_info("uuid 0x%04x", uuid);
-							break;
-						}
-					}
-					log_info("Summary: uuid 0x%04x, l2cap_psm 0x%04x, bnep_version 0x%04x", sdp_bnep_remote_uuid, sdp_bnep_l2cap_psm, sdp_bnep_version);
-					break;
-				}
-				default:
-					break;
-				}
-			}
-		}
-		else {
-			log_error("SDP attribute value buffer size exceeded: available %d, required %d", attribute_value_buffer_size, value_event->attribute_length);
-		}
-		break;
-
-	case SDP_QUERY_COMPLETE:
-		handle_sdp_client_record_complete();
-		complete_event = (sdp_query_complete_event_t*)event;
-		log_error("General query done with status %d, bnep psm %04x.", complete_event->status, bnep_l2cap_psm);
-		if (bnep_l2cap_psm) {
-			bnep_do_connect = complete_event->status == 0;
-		}
-		else {
-			log_error("No BNEP service found");
-		}
-		break;
-	}
-}
-
-static void packet_handler(void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)
-{
-	uint8_t   event;
-	bd_addr_t event_addr;
-	uint8_t   rfcomm_channel_nr;
-	uint16_t  uuid_source;
-	uint16_t  uuid_dest;
-	uint16_t  mtu;
-
-	switch (packet_type) {
-	case HCI_EVENT_PACKET:
-		event = packet[0];
-		switch (event) {
-		case BTSTACK_EVENT_STATE:
-			/* BT Stack activated, get started */
-			if (packet[2] == HCI_STATE_WORKING) {
-				hci_send_cmd(&hci_write_local_name, bt_localname);
-				/* Send a general query for BNEP Protocol ID */
-				log_info("Start SDP BNEP query.");
-				sdp_general_query_for_uuid(remote_addr, SDP_BNEPProtocol);
-			}
-			break;
-
-		case BTSTACK_EVENT_NR_CONNECTIONS_CHANGED:
-			if ((packet[2] == 0) && bnep_do_connect) {
-				bnep_do_connect = false;
-				/* Create BNEP connection */
-				bnep_connect(NULL, &remote_addr, bnep_l2cap_psm, bnep_remote_uuid);
-			}
-			break;
-
-		case HCI_EVENT_COMMAND_COMPLETE:
-			if (COMMAND_COMPLETE_EVENT(packet, hci_read_bd_addr)) {
-				bt_flip_addr(event_addr, &packet[6]);
-				log_info("BD-ADDR: %s", bd_addr_to_str(event_addr));
-
-				snprintf(bt_localname, sizeof(bt_localname), TARGET_NAME"%04x", ((event_addr[4] << 8) | event_addr[5]));
-				gap_set_local_name(bt_localname);
-				break;
-			}
-			if (COMMAND_COMPLETE_EVENT(packet, hci_write_local_name)) {
-				hci_discoverable_control(1);
-				break;
-			}
-			break;
-
-		case HCI_EVENT_LINK_KEY_REQUEST:
-			// deny link key request
-			log_info("Link key request");
-			bt_flip_addr(event_addr, &packet[2]);
-			hci_send_cmd(&hci_link_key_request_negative_reply, &event_addr);
-			break;
-
-		case HCI_EVENT_PIN_CODE_REQUEST:
-			// inform about pin code request
-			log_info("Pin code request - using '0000'");
-			bt_flip_addr(event_addr, &packet[2]);
-			hci_send_cmd(&hci_pin_code_request_reply, &event_addr, 4, "0000");
-			break;
-
-		case HCI_EVENT_USER_CONFIRMATION_REQUEST:
-			// inform about user confirmation request
-			log_info("HCI User Confirmation Request with numeric value '%06u'", READ_BT_32(packet, 8));
-			log_info("HCI User Confirmation Auto accept");
-			break;
-
-		case RFCOMM_EVENT_INCOMING_CONNECTION:
-			// data: event (8), len(8), address(48), channel (8), rfcomm_cid (16)
-			bt_flip_addr(event_addr, &packet[2]);
-			rfcomm_channel_nr = packet[8];
-			rfcomm_channel_id = READ_BT_16(packet, 9);
-			log_info("RFCOMM channel %u requested for %s", rfcomm_channel_nr, bd_addr_to_str(event_addr));
-			rfcomm_accept_connection_internal(rfcomm_channel_id);
-			break;
-
-		case RFCOMM_EVENT_OPEN_CHANNEL_COMPLETE:
-			// data: event(8), len(8), status (8), address (48), server channel(8), rfcomm_cid(16), max frame size(16)
-			if (packet[2]) {
-				log_info("RFCOMM channel open failed, status %u", packet[2]);
-			}
-			else {
-				rfcomm_channel_id = READ_BT_16(packet, 12);
-				mtu = READ_BT_16(packet, 14);
-				log_info("RFCOMM channel open succeeded. New RFCOMM Channel ID %u, max frame size %u", rfcomm_channel_id, mtu);
-			}
-			break;
-
-		case RFCOMM_EVENT_CHANNEL_CLOSED:
-			log_info("RFCOMM channel closed");
-			rfcomm_channel_id = 0;
-			break;
-
-		case BNEP_EVENT_OPEN_CHANNEL_COMPLETE:
-			if (packet[2]) {
-				log_info("BNEP channel open failed, status %02x", packet[2]);
-			}
-			else {
-				// data: event(8), len(8), status (8), bnep source uuid (16), bnep destination uuid (16), remote_address (48)
-				bnep_cid = READ_BT_16(packet, 3);
-				uuid_source = READ_BT_16(packet, 5);
-				uuid_dest = READ_BT_16(packet, 7);
-				mtu = READ_BT_16(packet, 9);
-				//bt_flip_addr(remote_addr, &packet[11]); 
-				memcpy(&remote_addr, &packet[11], sizeof(bd_addr_t));
-				log_info("BNEP connection open succeeded to %s source UUID 0x%04x dest UUID: 0x%04x, max frame size %u", bd_addr_to_str(event_addr), uuid_source, uuid_dest, mtu);
-				/* Setup network interface */
-				btstack_network_up(bnep_cid, (uint8_t *)hci_local_bd_addr(), (uint8_t *)remote_addr);
-				log_info("Network Interface %s activated", btstack_network_get_name(bnep_cid));
-			}
-			break;
-
-		case BNEP_EVENT_CHANNEL_TIMEOUT:
-			log_info("BNEP channel timeout! Channel will be closed");
-			break;
-
-		case BNEP_EVENT_CHANNEL_CLOSED:
-			bnep_cid = READ_BT_16(packet, 2);
-			bt_channel_closed(bnep_cid);
-			break;
-
-		case BNEP_EVENT_READY_TO_SEND:
-			bnep_cid = READ_BT_16(packet, 2);
-			bt_send_packet(bnep_cid);
-			break;
-
-		default:
-			break;
-		}
-		break;
-
-	case RFCOMM_DATA_PACKET:
-		// loopback
-		if (rfcomm_channel_id) {
-			int err = rfcomm_send_internal(rfcomm_channel_id, packet, size);
-			if (err) {
-				log_error("rfcomm_send_internal -> error %d", err);
-			}
-		}
-		break;
-
-	case BNEP_DATA_PACKET:
-		bt_recv_packet(channel, packet, size);
-		break;
-
-	default:
-		break;
-	}
-}
-
-/*
- * @section Network packet handler
- *
- * @text A pointer to the network packet is stored and a BNEP_EVENT_CAN_SEND_NOW requested
- */
-
- /* LISTING_START(networkPacketHandler): Network Packet Handler */
-static void network_send_packet_callback(uint16_t bnep_cid, const uint8_t * packet, uint16_t size) {
-	if ((bnep_cid == 0) || (network_buffer_len > 0)) {
-#ifdef PACKET_DUMP
-		int len = size;
-		printf("DROP %04x %d ", bnep_cid, size);
-		if (len > 128)
-			len = 128;
-		printf_hexdump(packet, len);
-#endif
-		if (network_buffer_len > 0) {
-			network_buffer_len = 0;
-			btstack_network_packet_sent(network_buffer_cid);
-		}
-	}
-
-	network_buffer_cid = bnep_cid;
-	network_buffer = packet;
-	network_buffer_len = size;
-}
-
-void panu_init(void)
-{
-	const hci_transport_t *transport;
-	bt_control_t       * control;
-	hci_uart_config_t  * config;
-	remote_device_db_t * remote_db;
-	service_record_item_t *spp_service_record_item;
-	service_record_item_t *bnep_service_record_item;
-
-	//hci_dump_open("", HCI_DUMP_PACKETLOGGER);
-
-	log_info("bt初期化...");
-
-	// start with BTstack init - especially configure HCI Transport
-	btstack_memory_init();
-	run_loop_init(RUN_LOOP_EMBEDDED);
-
-	/* Initialize HCI */
-	log_info("HCI初期化...");
-	transport = hci_transport_usb_instance();
-	control = NULL;
-	config = NULL;
-	remote_db = (remote_device_db_t *)&remote_device_db_memory;
-	hci_init(transport, config, control, remote_db);
-	hci_set_class_of_device(0x820300/*0x820810*/);
-
-	/* Initialize L2CAP */
-	log_info("L2CAP初期化...");
-	l2cap_init();
-	l2cap_register_packet_handler(packet_handler);
-
-	/* Initialise SDP, create record for SPP and register with SDP */
-	log_info("SDP初期化...");
-	sdp_init();
-
-	/* Initialize RFCOMM */
-	log_info("RFCOMM初期化...");
-	rfcomm_init();
-	rfcomm_register_packet_handler(packet_handler);
-	rfcomm_register_service_internal(NULL, RFCOMM_SERVER_CHANNEL, 0xffff);  // reserved channel, mtu=100
-
-	/* Initialise BNEP */
-	log_info("BNEP初期化...");
-	bnep_init();
-	bnep_register_packet_handler(packet_handler);
-	bnep_register_service(NULL, BNEP_UUID_PANU, BNEP_MTU_MIN);  /* Minimum L2CAP MTU for bnep is 1691 bytes */
-
-	memset(spp_service_buffer, 0, sizeof(spp_service_buffer));
-	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;
-
-	log_info("SPPサービス登録...");
-	sdp_create_spp_service((uint8_t*)&spp_service_record_item->service_record, 1, "RX SPP");
-	de_dump_data_element((uint8_t*)spp_service_record_item->service_record);
-	log_info("SSP SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)spp_service_record_item->service_record)));
-	sdp_register_service_internal(NULL, spp_service_record_item);
-
-	log_info("BNEPサービス登録...");
-	pan_create_panu_service((uint8_t*)&bnep_service_record_item->service_record, "RX PANU", "RX PANU", BNEP_SECURITY_NONE);
-	de_dump_data_element((uint8_t*)bnep_service_record_item->service_record);
-	log_info("PANU SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)bnep_service_record_item->service_record)));
-	sdp_register_service_internal(NULL, bnep_service_record_item);
-
-	// Secure Simple Pairing configuration -> just works
-	hci_ssp_set_enable(1);
-	hci_ssp_set_io_capability(SSP_IO_CAPABILITY_NO_INPUT_NO_OUTPUT);
-	hci_ssp_set_auto_accept(1);
-
-	/* Turn on the device */
-	log_info("HCI電源ON...");
-	hci_power_control(HCI_POWER_ON);
-
-	/* Initialise SDP */
-	sdp_parser_init();
-	sdp_parser_register_callback(handle_sdp_client_query_result);
-}
-
-void nap_init(void);
-
-void bt_init(void)
-{
-	btstack_network_init(&network_send_packet_callback);
-
-	if (bt_bnep_mode == 0) {
-		panu_init();
-	}
-	else {
-		nap_init();
-	}
-
-	bt_enabled = true;
-}
-
-void bt_task(void)
-{
-	extern void hal_tick_handler();
-
-	if (bt_enabled) {
-		hal_tick_handler();
-		run_loop_execute();
-		bt_send_packet(0xffff);
-	}
-}
-
-int bt_can_send_packet(void)
-{
-	return network_buffer_len == 0;
-}
-
-void bt_send_packet(uint16_t bnep_cid)
-{
-	if (network_buffer_len > 0) {
-		if (network_buffer_cid == 0) {
-			network_buffer_len = 0;
-			btstack_network_packet_sent(network_buffer_cid);
-			return;
-		}
-		/* Check for parked network packets and send it out now */
-		if (bnep_can_send_packet_now(network_buffer_cid)) {
-			uint16_t len = network_buffer_len;
-#ifdef PACKET_DUMP
-			printf("ETH %u => ", len);
-			if (len > 128)
-				len = 128;
-			printf_hexdump(network_buffer, len);
-#endif
-			// この関数はbnep_sendから再帰呼び出しされるので、
-			// bnep_sendを呼び出すより前に送信パケットなし状態にします。
-			network_buffer_len = 0;
-			bnep_send(network_buffer_cid, (uint8_t*)network_buffer, len);
-			btstack_network_packet_sent(network_buffer_cid);
-		}
-	}
-}
-
-void bt_recv_packet(uint16_t bnep_cid, const uint8_t * packet, uint16_t size)
-{
-#ifdef PACKET_DUMP
-	int len = size;
-	printf("ETH %d <= ", size);
-	if (len > 128)
-		len = 128;
-	printf_hexdump(packet, len);
-#endif
-	btstack_network_process_packet(bnep_cid, packet, size);
-}
-
-void bt_channel_closed(uint16_t bnep_cid)
-{
-	log_info("BNEP channel closed");
-	btstack_network_down(bnep_cid);
-	if ((network_buffer_len > 0) && (network_buffer_cid == bnep_cid)) {
-		network_buffer_len = 0;
-		btstack_network_packet_sent(network_buffer_cid);
-	}
-}
-
-void bt_terminate(void)
-{
-	hci_close();
-
-	bt_enabled = false;
-}
Index: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/panu_main.h
===================================================================
--- asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netdev/if_btusb/panu_main.h	(revision 364)
+++ 	(revision )
@@ -1,35 +1,0 @@
-/*
- * panu_main.h
- *
- */
-#ifndef __BT_MAIN_
-#define __BT_MAIN_
-
-#if defined __cplusplus
-extern "C" {
-#endif
-
-// エラー返却用定数(-1:0xffff固定)
-#define FAILED_RFCOMM_ID_NOT_SET	0xffff
-
-#define RFCOMM_SERVER_CHANNEL 1
-
-void bt_init(void);
-void bt_task(void);
-int bt_can_send_packet(void);
-void bt_send_packet(uint16_t bnep_cid);
-void bt_recv_packet(uint16_t bnep_cid, const uint8_t * packet, uint16_t size);
-void bt_channel_closed(uint16_t bnep_cid);
-void bt_terminate(void);
-
-void btstack_network_init(void (*send_packet_callback)(uint16_t bnep_cid, const uint8_t * packet, uint16_t size));
-void btstack_network_up(uint16_t bnep_cid, bd_addr_t local_addr, bd_addr_t remote_addr);
-const char * btstack_network_get_name(uint16_t bnep_cid);
-int btstack_network_down(uint16_t bnep_cid);
-void btstack_network_process_packet(uint16_t bnep_cid, const uint8_t * packet, uint16_t size);
-void btstack_network_packet_sent(uint16_t bnep_cid);
-
-#if defined __cplusplus
-}
-#endif
-#endif
