tecscde 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rubocop.yml +125 -0
  4. data/.rubocop_todo.yml +188 -0
  5. data/CHANGELOG.md +3 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE +46 -0
  8. data/LICENSE.ja +32 -0
  9. data/README.ja.md +200 -0
  10. data/README.md +35 -0
  11. data/Rakefile +27 -0
  12. data/bin/tecscde +64 -0
  13. data/glade/tecscde-cell-property.glade +205 -0
  14. data/glade/tecscde-celltype-property.glade +172 -0
  15. data/glade/tecscde-celltype.glade +414 -0
  16. data/glade/tecscde-export.glade +161 -0
  17. data/glade/test-cell-plugin.rb +51 -0
  18. data/glade/test-cell-property.rb +35 -0
  19. data/glade/test-export.rb +35 -0
  20. data/glade/test-palette.rb +26 -0
  21. data/lib/tcflow.rb +148 -0
  22. data/lib/tecscde.rb +65 -0
  23. data/lib/tecscde/NewCell.png +0 -0
  24. data/lib/tecscde/SelectArrow.png +0 -0
  25. data/lib/tecscde/attr_tree_view.rb +253 -0
  26. data/lib/tecscde/cell_plugin_dialog.glade +294 -0
  27. data/lib/tecscde/cell_plugin_dialog.rb +89 -0
  28. data/lib/tecscde/celltype_tree_view.rb +105 -0
  29. data/lib/tecscde/change_set_control.rb +35 -0
  30. data/lib/tecscde/change_set_control/change_set.rb +32 -0
  31. data/lib/tecscde/change_set_control/change_set_manager.rb +62 -0
  32. data/lib/tecscde/command.rb +35 -0
  33. data/lib/tecscde/control.rb +491 -0
  34. data/lib/tecscde/highlighted_objects.rb +180 -0
  35. data/lib/tecscde/logger.rb +74 -0
  36. data/lib/tecscde/main_view_and_model.rb +80 -0
  37. data/lib/tecscde/palette.glade +553 -0
  38. data/lib/tecscde/palette.rb +174 -0
  39. data/lib/tecscde/preferences.glade +117 -0
  40. data/lib/tecscde/preferences.rb +44 -0
  41. data/lib/tecscde/tecs_model.rb +1137 -0
  42. data/lib/tecscde/tecs_model/hbar.rb +68 -0
  43. data/lib/tecscde/tecs_model/tm_c_port.rb +122 -0
  44. data/lib/tecscde/tecs_model/tm_c_port_array.rb +98 -0
  45. data/lib/tecscde/tecs_model/tm_cell.rb +496 -0
  46. data/lib/tecscde/tecs_model/tm_e_port.rb +126 -0
  47. data/lib/tecscde/tecs_model/tm_e_port_array.rb +78 -0
  48. data/lib/tecscde/tecs_model/tm_join.rb +293 -0
  49. data/lib/tecscde/tecs_model/tm_join_bar.rb +146 -0
  50. data/lib/tecscde/tecs_model/tm_port.rb +238 -0
  51. data/lib/tecscde/tecs_model/tm_port_array.rb +246 -0
  52. data/lib/tecscde/tecs_model/tm_region.rb +107 -0
  53. data/lib/tecscde/tecs_model/tm_uneditable.rb +68 -0
  54. data/lib/tecscde/tecs_model/vbar.rb +68 -0
  55. data/lib/tecscde/templates/_cell_info.cde.erb +15 -0
  56. data/lib/tecscde/templates/_join_info.cde.erb +28 -0
  57. data/lib/tecscde/templates/main.cde.erb +49 -0
  58. data/lib/tecscde/tm_object.rb +91 -0
  59. data/lib/tecscde/version.rb +4 -0
  60. data/lib/tecscde/view.rb +58 -0
  61. data/lib/tecscde/view/cairo_matrix.rb +90 -0
  62. data/lib/tecscde/view/canvas.rb +59 -0
  63. data/lib/tecscde/view/constants.rb +114 -0
  64. data/lib/tecscde/view/main_view.rb +1245 -0
  65. data/lib/tecsflow.rb +475 -0
  66. data/lib/tecsflow/C_parser.tab.rb +2471 -0
  67. data/lib/tecsflow/C_parser.y.rb +1087 -0
  68. data/lib/tecsflow/classes.rb +421 -0
  69. data/lib/tecsgen.rb +581 -0
  70. data/lib/tecsgen/core/C_parser.tab.rb +2477 -0
  71. data/lib/tecsgen/core/C_parser.y +1032 -0
  72. data/lib/tecsgen/core/bnf-deb.tab.rb +5193 -0
  73. data/lib/tecsgen/core/bnf.tab.rb +5193 -0
  74. data/lib/tecsgen/core/bnf.y +2211 -0
  75. data/lib/tecsgen/core/componentobj.rb +7901 -0
  76. data/lib/tecsgen/core/ctypes.rb +226 -0
  77. data/lib/tecsgen/core/expression.rb +1031 -0
  78. data/lib/tecsgen/core/gen_xml.rb +374 -0
  79. data/lib/tecsgen/core/generate.rb +5206 -0
  80. data/lib/tecsgen/core/location.rb +116 -0
  81. data/lib/tecsgen/core/messages.rb +101 -0
  82. data/lib/tecsgen/core/optimize.rb +456 -0
  83. data/lib/tecsgen/core/plugin.rb +332 -0
  84. data/lib/tecsgen/core/pluginModule.rb +165 -0
  85. data/lib/tecsgen/core/syntaxobj.rb +1234 -0
  86. data/lib/tecsgen/core/tecs_lang.rb +306 -0
  87. data/lib/tecsgen/core/tecsgen.rb +453 -0
  88. data/lib/tecsgen/core/tecsinfo.rb +860 -0
  89. data/lib/tecsgen/core/tool_info.rb +258 -0
  90. data/lib/tecsgen/core/types.rb +1632 -0
  91. data/lib/tecsgen/core/unjoin_plugin.rb +218 -0
  92. data/lib/tecsgen/core/value.rb +650 -0
  93. data/lib/tecsgen/messages/messages_console_en_US.rb +1171 -0
  94. data/lib/tecsgen/messages/messages_console_ja_JP.rb +1171 -0
  95. data/lib/tecsgen/messages/messages_file_en_US.rb +334 -0
  96. data/lib/tecsgen/messages/messages_file_ja_JP.rb +163 -0
  97. data/lib/tecsgen/plugin/ATK1AlarmPlugin.rb +196 -0
  98. data/lib/tecsgen/plugin/ATK1DelayTaskPlugin.rb +106 -0
  99. data/lib/tecsgen/plugin/ATK1EventPlugin.rb +147 -0
  100. data/lib/tecsgen/plugin/ATK1ISRPlugin.rb +174 -0
  101. data/lib/tecsgen/plugin/ATK1KernelPlugin.rb +287 -0
  102. data/lib/tecsgen/plugin/ATK1ResourcePlugin.rb +124 -0
  103. data/lib/tecsgen/plugin/ATK1TaskPlugin.rb +220 -0
  104. data/lib/tecsgen/plugin/C2TECSBridgePlugin.rb +210 -0
  105. data/lib/tecsgen/plugin/CellPlugin.rb +61 -0
  106. data/lib/tecsgen/plugin/CelltypePlugin.rb +72 -0
  107. data/lib/tecsgen/plugin/CompositePlugin.rb +66 -0
  108. data/lib/tecsgen/plugin/DomainPlugin.rb +89 -0
  109. data/lib/tecsgen/plugin/HRP2AlarmHandlerPlugin.rb +76 -0
  110. data/lib/tecsgen/plugin/HRP2Cache.rb +1 -0
  111. data/lib/tecsgen/plugin/HRP2CyclicHandlerPlugin.rb +75 -0
  112. data/lib/tecsgen/plugin/HRP2DataqueuePlugin.rb +68 -0
  113. data/lib/tecsgen/plugin/HRP2EventflagPlugin.rb +68 -0
  114. data/lib/tecsgen/plugin/HRP2FixedSizeMemoryPoolPlugin.rb +68 -0
  115. data/lib/tecsgen/plugin/HRP2HandlerPlugin.rb +117 -0
  116. data/lib/tecsgen/plugin/HRP2KernelObjectPlugin.rb +372 -0
  117. data/lib/tecsgen/plugin/HRP2ObjectPlugin.rb +94 -0
  118. data/lib/tecsgen/plugin/HRP2Plugin.rb +140 -0
  119. data/lib/tecsgen/plugin/HRP2PostHook.rb +111 -0
  120. data/lib/tecsgen/plugin/HRP2PriorityDataqueuePlugin.rb +66 -0
  121. data/lib/tecsgen/plugin/HRP2RPCPlugin.rb +319 -0
  122. data/lib/tecsgen/plugin/HRP2SVCPlugin.rb +473 -0
  123. data/lib/tecsgen/plugin/HRP2SemaphorePlugin.rb +67 -0
  124. data/lib/tecsgen/plugin/HRP2TaskPlugin.rb +200 -0
  125. data/lib/tecsgen/plugin/HRPHandlerPlugin.rb +125 -0
  126. data/lib/tecsgen/plugin/HRPKernelObjectManager.rb +72 -0
  127. data/lib/tecsgen/plugin/HRPKernelObjectPlugin.rb +333 -0
  128. data/lib/tecsgen/plugin/HRPObjectPlugin.rb +93 -0
  129. data/lib/tecsgen/plugin/HRPPlugin.rb +356 -0
  130. data/lib/tecsgen/plugin/HRPRPCPlugin.rb +407 -0
  131. data/lib/tecsgen/plugin/HRPSVCPlugin.rb +859 -0
  132. data/lib/tecsgen/plugin/HRPTaskPlugin.rb +107 -0
  133. data/lib/tecsgen/plugin/Mruby2CBridgePlugin.rb +86 -0
  134. data/lib/tecsgen/plugin/MrubyBridgeCellPlugin.rb +264 -0
  135. data/lib/tecsgen/plugin/MrubyBridgeCelltypePlugin.rb +293 -0
  136. data/lib/tecsgen/plugin/MrubyBridgeCompositePlugin.rb +49 -0
  137. data/lib/tecsgen/plugin/MrubyBridgePlugin.rb +67 -0
  138. data/lib/tecsgen/plugin/MrubyBridgeSignaturePlugin.rb +1307 -0
  139. data/lib/tecsgen/plugin/MrubyInfoBridgePlugin.rb +14 -0
  140. data/lib/tecsgen/plugin/MrubyInfoBridgeSignaturePlugin.rb +994 -0
  141. data/lib/tecsgen/plugin/MultiPlugin.rb +57 -0
  142. data/lib/tecsgen/plugin/NotifierPlugin.rb +1217 -0
  143. data/lib/tecsgen/plugin/OpaqueMarshalerPlugin.rb +81 -0
  144. data/lib/tecsgen/plugin/OpaqueRPCPlugin.rb +323 -0
  145. data/lib/tecsgen/plugin/RPCPlugin.rb +266 -0
  146. data/lib/tecsgen/plugin/RepeatCellPlugin.rb +166 -0
  147. data/lib/tecsgen/plugin/RepeatJoinPlugin.rb +130 -0
  148. data/lib/tecsgen/plugin/SharedOpaqueRPCPlugin.rb +357 -0
  149. data/lib/tecsgen/plugin/SharedRPCPlugin.rb +329 -0
  150. data/lib/tecsgen/plugin/SignaturePlugin.rb +77 -0
  151. data/lib/tecsgen/plugin/TECS2CBridgePlugin.rb +178 -0
  152. data/lib/tecsgen/plugin/TECSInfoPlugin.rb +280 -0
  153. data/lib/tecsgen/plugin/ThroughPlugin.rb +333 -0
  154. data/lib/tecsgen/plugin/TracePlugin.rb +484 -0
  155. data/lib/tecsgen/plugin/lib/GenHRP2Marshaler.rb +761 -0
  156. data/lib/tecsgen/plugin/lib/GenOpaqueMarshaler.rb +1107 -0
  157. data/lib/tecsgen/plugin/lib/GenParamCopy.rb +365 -0
  158. data/lib/tecsgen/plugin/lib/GenTransparentMarshaler.rb +683 -0
  159. data/lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb +283 -0
  160. data/lib/tecsgen/plugin/lib/MrubyBridgeSignaturePluginModule.rb +277 -0
  161. data/lib/tecsgen/version.rb +6 -0
  162. data/samples/FigureSamples/active/active.cde +104 -0
  163. data/samples/FigureSamples/active/active.cdl +20 -0
  164. data/samples/FigureSamples/active/active.pdf +0 -0
  165. data/samples/FigureSamples/active/active.png +0 -0
  166. data/samples/FigureSamples/active/gen/tmp_C_src.c +36 -0
  167. data/samples/FigureSamples/active/gen/tmp_cygwin_tecs.h +1908 -0
  168. data/samples/FigureSamples/active/gen/tmp_plugin_post_code.cdl +0 -0
  169. data/samples/FigureSamples/allocator/allocator-internal.png +0 -0
  170. data/samples/FigureSamples/allocator/allocator.cde +171 -0
  171. data/samples/FigureSamples/allocator/allocator.cdl +58 -0
  172. data/samples/FigureSamples/allocator/allocator.png +0 -0
  173. data/samples/FigureSamples/basic/Makefile +87 -0
  174. data/samples/FigureSamples/basic/SimpleSample-trace.cdl +50 -0
  175. data/samples/FigureSamples/basic/SimpleSample.cde +91 -0
  176. data/samples/FigureSamples/basic/SimpleSample.cdl +47 -0
  177. data/samples/FigureSamples/basic/basic.cde +93 -0
  178. data/samples/FigureSamples/basic/basic.cdl +46 -0
  179. data/samples/FigureSamples/basic/basic.png +0 -0
  180. data/samples/FigureSamples/callback/callback.cde +130 -0
  181. data/samples/FigureSamples/callback/callback.cdl +29 -0
  182. data/samples/FigureSamples/callback/callback.png +0 -0
  183. data/samples/FigureSamples/carray/carray.cde +144 -0
  184. data/samples/FigureSamples/carray/carray.cdl +38 -0
  185. data/samples/FigureSamples/carray/carray.png +0 -0
  186. data/samples/FigureSamples/cearray/cearray.cde +314 -0
  187. data/samples/FigureSamples/cearray/cearray.cdl +60 -0
  188. data/samples/FigureSamples/cearray/cearray.png +0 -0
  189. data/samples/FigureSamples/composite/composite-internal.png +0 -0
  190. data/samples/FigureSamples/composite/composite.cde +216 -0
  191. data/samples/FigureSamples/composite/composite.cdl +95 -0
  192. data/samples/FigureSamples/composite/composite.png +0 -0
  193. data/samples/FigureSamples/earray/earray.cde +142 -0
  194. data/samples/FigureSamples/earray/earray.cdl +38 -0
  195. data/samples/FigureSamples/earray/earray.png +0 -0
  196. data/samples/FigureSamples/join/Makefile +87 -0
  197. data/samples/FigureSamples/join/join.cde +132 -0
  198. data/samples/FigureSamples/join/join.cdl +40 -0
  199. data/samples/FigureSamples/join/join.png +0 -0
  200. data/samples/FigureSamples/relay/Makefile +99 -0
  201. data/samples/FigureSamples/relay/relay-internal.png +0 -0
  202. data/samples/FigureSamples/relay/relay.cde +284 -0
  203. data/samples/FigureSamples/relay/relay.cdl +52 -0
  204. data/samples/FigureSamples/relay/relay.png +0 -0
  205. data/samples/FigureSamples/rpc/Makefile +123 -0
  206. data/samples/FigureSamples/rpc/rpc-expand.png +0 -0
  207. data/samples/FigureSamples/rpc/rpc.cde +245 -0
  208. data/samples/FigureSamples/rpc/rpc.png +0 -0
  209. data/samples/FigureSamples/rpc/rpc_sample.cdl +53 -0
  210. data/samples/SimpleSample/Makefile +25 -0
  211. data/samples/SimpleSample/SimpleSample/Makefile +86 -0
  212. data/samples/SimpleSample/SimpleSample/Makefile-trace +91 -0
  213. data/samples/SimpleSample/SimpleSample/README.txt +106 -0
  214. data/samples/SimpleSample/SimpleSample/SimpleSample-trace.cdl +50 -0
  215. data/samples/SimpleSample/SimpleSample/SimpleSample.cdl +45 -0
  216. data/samples/SimpleSample/SimpleSample/src/tSample.c +77 -0
  217. data/samples/SimpleSample/SimpleSample/src/tSimple.c +48 -0
  218. data/samples/SimpleSample/SimpleSample/src/tecs-types.h +27 -0
  219. data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile +51 -0
  220. data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile-trace +91 -0
  221. data/samples/SimpleSample/SimpleSampleOpaqueRPC/README.txt +106 -0
  222. data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample-trace.cdl +80 -0
  223. data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample.cdl +77 -0
  224. data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSample/Makefile +112 -0
  225. data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSimple/Makefile +109 -0
  226. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSample.c +80 -0
  227. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSimple.c +47 -0
  228. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tTaskMain.c +66 -0
  229. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tecs-types.h +27 -0
  230. data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile +125 -0
  231. data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile-trace +130 -0
  232. data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample-trace.cdl +54 -0
  233. data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample.cdl +53 -0
  234. data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSample.c +80 -0
  235. data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSimple.c +54 -0
  236. data/tecscde.gemspec +41 -0
  237. metadata +353 -0
@@ -0,0 +1,473 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-2014 by TOPPERS Project
6
+ #--
7
+ # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
8
+ # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9
+ # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10
+ # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11
+ # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12
+ # スコード中に含まれていること.
13
+ # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14
+ # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15
+ # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16
+ # の無保証規定を掲載すること.
17
+ # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18
+ # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19
+ # と.
20
+ # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21
+ # 作権表示,この利用条件および下記の無保証規定を掲載すること.
22
+ # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23
+ # 報告すること.
24
+ # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25
+ # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26
+ # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27
+ # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28
+ # 免責すること.
29
+ #
30
+ # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31
+ # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32
+ # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33
+ # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34
+ # の責任を負わない.
35
+ #
36
+ # $Id: HRP2SVCPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ # mikan through plugin: namespace が考慮されていない
40
+ # これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
41
+ # tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
42
+
43
+ # 以下を仮定(制限事項)
44
+ # 呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
45
+ # 有符号、無符号でサイズが同じ
46
+
47
+ class SVCManage
48
+ # TODO: デフォルトの拡張サービスコール分を予約しておく
49
+ # デフォルトの拡張サービスコール(syslogなど)もコンポーネント化するまで
50
+ @@id = 20
51
+ @@func_ids = {}
52
+ def self.get_func_id(func_name)
53
+ return @@func_ids[func_name]
54
+ end
55
+
56
+ def self.set_func_id(func_name)
57
+ @@func_ids[func_name] = self.assign_id
58
+ puts @@func_ids[func_name]
59
+ end
60
+
61
+ def self.include_func_id?(func_name)
62
+ return @@func_ids.has_key?(func_name)
63
+ end
64
+
65
+ def self.get_id
66
+ return @@id
67
+ end
68
+
69
+ def self.set_id(id)
70
+ @@id = id
71
+ end
72
+
73
+ def self.assign_id
74
+ @@id += 1
75
+ return @@id
76
+ end
77
+ end
78
+
79
+ #
80
+ # 拡張サービスコールを用いたドメイン間通信の
81
+ # throughプラグイン
82
+ # HRP2ドメインプラグインによって挿入される
83
+ #
84
+ class HRP2SVCPlugin < ThroughPlugin
85
+ #=== RPCPlugin の initialize
86
+ # 説明は ThroughPlugin (plugin.rb) を参照
87
+ @@generated_celltype_header = {}
88
+
89
+ def initialize(cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell)
90
+ super
91
+ @ct_name_body = "#{@ct_name}SVCBody_#{@next_cell.get_name}_#{@next_cell_port_name}".to_sym
92
+ @ct_name = "#{@ct_name}SVCCaller_#{@next_cell.get_name}_#{@next_cell_port_name}".to_sym
93
+ @cell_name_body = "#{@cell_name}SVCBody".to_sym
94
+ @cell_name = "#{@cell_name}SVCCaller".to_sym
95
+ puts "%%%% "
96
+ p @next_cell.get_name
97
+ p @caller_cell.get_name
98
+ end
99
+
100
+ #=== NamespacePath を得る
101
+ # 生成するセルの namespace path を生成する
102
+ def get_cell_namespace_path
103
+ # nsp = @region.get_namespace.get_namespace_path
104
+ nsp = @start_region.get_namespace_path
105
+ return nsp.append(@cell_name)
106
+ end
107
+
108
+ def gen_plugin_decl_code(file)
109
+ # このセルタイプ(同じシグニチャ)は既に生成されているか?
110
+ if !HRP2KernelObjectPlugin.include_celltype?(@next_cell.get_celltype)
111
+ if @@generated_celltype[@ct_name_body].nil?
112
+ @@generated_celltype[@ct_name_body] = [self]
113
+ file2 = CFile.open("#{$gen}/#{@ct_name_body}.cdl", "w")
114
+ file2.print <<EOT
115
+ [active]
116
+ celltype #{@ct_name_body} {
117
+ call #{@signature.get_name} #{@call_port_name};
118
+ };
119
+ EOT
120
+ file2.close
121
+ else
122
+ @@generated_celltype[@ct_name_body] << self
123
+ end
124
+ file.print "import( \"#{$gen}/#{@ct_name_body}.cdl\" );\n"
125
+ end
126
+
127
+ # このセルタイプ(同じシグニチャ)は既に生成されているか?
128
+ if @@generated_celltype[@ct_name].nil?
129
+ @@generated_celltype[@ct_name] = [self]
130
+ file2 = CFile.open("#{$gen}/#{@ct_name}.cdl", "w")
131
+ if !HRP2KernelObjectPlugin.include_celltype?(@next_cell.get_celltype)
132
+ file2.print <<EOT
133
+ celltype #{@ct_name} {
134
+ entry #{@signature.get_name} #{@entry_port_name};
135
+ };
136
+ EOT
137
+ else
138
+ # TODO inlineにした方が効率がよいが,tecsgenの生成したヘッダファイルの
139
+ # 読込順のためにエラーとなる
140
+ file2.print <<EOT
141
+ celltype #{@ct_name} {
142
+ //[inline] entry #{@signature.get_name} #{@entry_port_name};
143
+ entry #{@signature.get_name} #{@entry_port_name};
144
+ call #{@signature.get_name} #{@call_port_name};
145
+ };
146
+ EOT
147
+ end
148
+
149
+ file2.close
150
+ else
151
+ @@generated_celltype[@ct_name] << self
152
+ end
153
+ file.print "import( \"#{$gen}/#{@ct_name}.cdl\" );\n"
154
+
155
+ =begin
156
+ # TODO: send. receive 対応
157
+ send_receive = []
158
+ if @signature != nil then
159
+ @signature.each_param{ |fd,param|
160
+ dir =param.get_direction
161
+ case dir
162
+ when :SEND, :RECEIVE
163
+ send_receive << [ dir, fd, param ]
164
+ end
165
+ }
166
+ end
167
+ =end
168
+
169
+ =begin
170
+ composite #{@ct_name} {
171
+ entry #{@signature.get_name} #{@entry_port_name};
172
+ call #{@signature.get_name} #{@call_port_name};
173
+
174
+ cell #{@ct_name}Client #{@cell_name}Client{
175
+ };
176
+
177
+ [active]
178
+ cell #{@ct_name}Server #{@cell_name}Server{
179
+ #{@call_port_name} => composite.#{@call_port_name};
180
+ };
181
+
182
+ composite.#{@entry_port_name} => #{@cell_name}.#{@entry_port_name};
183
+ };
184
+ =end
185
+ end
186
+
187
+ #=== through cell コードを生成
188
+ #
189
+ #
190
+ def gen_through_cell_code(file)
191
+ # require "HRP2Cache"
192
+
193
+ gen_plugin_decl_code(file)
194
+
195
+ if !HRP2KernelObjectPlugin.include_celltype?(@next_cell.get_celltype)
196
+ # セルを探す
197
+ # path =["::",@next_cell.get_name] # mikan namespace
198
+ # cell = Namespace.find( path )
199
+ # cell = Namespace.find( @next_cell.get_namespace_path )
200
+
201
+ ##### クライアント側のセルの生成 #####
202
+ # file.print "[domain(HRP2, \"trusted\")]"
203
+ nest = @start_region.gen_region_str_pre file
204
+ nest_str = " " * nest
205
+
206
+ # クライアント側チャンネルの生成
207
+ # 拡張サービスコール呼出し
208
+ file.print <<EOT
209
+ #{nest_str} // Client Side Channel
210
+ #{nest_str} cell #{@ct_name} #{@cell_name}{
211
+ #{nest_str} };
212
+
213
+ EOT
214
+
215
+ @start_region.gen_region_str_post file
216
+ file.print "\n\n"
217
+
218
+ ##### サーバー側のセルの生成 #####
219
+ nest = @end_region.gen_region_str_pre file
220
+ nest_str = " " * nest
221
+ if @next_cell_port_subscript
222
+ subscript = "[" + @next_cell_port_subscript.to_s + "]"
223
+ else
224
+ subscript = ""
225
+ end
226
+
227
+ # サーバー側チャンネルの生成
228
+ # 拡張サービスコール本体
229
+ file.print <<EOT
230
+
231
+ #{nest_str} // Server Side Channel
232
+ #{nest_str} cell #{@ct_name_body} #{@cell_name_body}{
233
+ #{nest_str} #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
234
+ #{nest_str} };
235
+ EOT
236
+
237
+ @end_region.gen_region_str_post file
238
+
239
+ file2 = AppFile.open("#{$gen}/tecsgen.cfg")
240
+ file2.print "\n/* Generated by HRP2SVCPlugin */\n\n"
241
+ file2.print <<EOT
242
+ #include "#{@ct_name_body}_factory.h"
243
+ EOT
244
+ file2.close
245
+ else
246
+
247
+ ##### クライアント側のセルの生成 #####
248
+ nest = @start_region.gen_region_str_pre file
249
+ nest_str = " " * nest
250
+ if @next_cell_port_subscript
251
+ subscript = "[" + @next_cell_port_subscript.to_s + "]"
252
+ else
253
+ subscript = ""
254
+ end
255
+
256
+ # クライアント側チャンネルの生成
257
+ # 拡張サービスコール呼出し
258
+ file.print <<EOT
259
+ #{nest_str} // Client Side Channel
260
+ #{nest_str} cell #{@ct_name} #{@cell_name}{
261
+ #{nest_str} #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
262
+ #{nest_str} };
263
+
264
+ EOT
265
+
266
+ @start_region.gen_region_str_post file
267
+ file.print "\n\n"
268
+
269
+ end
270
+ end
271
+
272
+ #=== 受け口関数の本体(C言語)を生成する
273
+ # 通常であれば、ジェネレータは受け口関数のテンプレートを生成する
274
+ # プラグインの場合、変更する必要のないセルタイプコードを生成する
275
+ # file:: FILE 出力先ファイル
276
+ # b_singleton:: bool true if singleton
277
+ # ct_name:: Symbol
278
+ # global_ct_name:: string
279
+ # sig_name:: string
280
+ # ep_name:: string
281
+ # func_name:: string
282
+ # func_global_name:: string
283
+ # func_type:: class derived from Type
284
+ 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)
285
+ puts "generate ep_func for #{ct_name}"
286
+
287
+ if !HRP2KernelObjectPlugin.include_celltype?(@next_cell.get_celltype)
288
+ # 拡張サービスコール呼出し
289
+ if !func_type.get_type.is_a?(VoidType)
290
+ file.print(" #{func_type.get_type_str} retval;\n")
291
+ end
292
+
293
+ if !b_singleton
294
+
295
+ file.print <<EOT
296
+ #{ct_name}_CB *p_cellcb;
297
+ if( VALID_IDX( idx ) ){
298
+ p_cellcb = #{global_ct_name}_GET_CELLCB(idx);
299
+ }else{
300
+ /* エラー処理コードをここに記述 */
301
+ }
302
+
303
+ EOT
304
+ end
305
+
306
+ # p "celltype_name, sig_name, func_name, func_global_name"
307
+ # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}"
308
+
309
+ delim = ""
310
+ if !func_type.get_type.is_a?(VoidType)
311
+ file.print(" retval = (#{func_type.get_type_str})")
312
+ else
313
+ file.print(" ")
314
+ end
315
+
316
+ # file.print( "#{@call_port_name}_#{func_name}(" )
317
+ # svcid = SVCManage.assign_id
318
+ new_func = false
319
+ if SVCManage.include_func_id?("#{@ct_name_body}_#{func_name}") == false
320
+ new_func = true
321
+ SVCManage.set_func_id("#{@ct_name_body}_#{func_name}")
322
+ end
323
+ svcid = SVCManage.get_func_id("#{@ct_name_body}_#{func_name}")
324
+ # file.print( "cal_svc( #{@ct_name_body}_#{func_name}" )
325
+ file.print("cal_svc( #{svcid}")
326
+
327
+ # if ( ! b_singleton ) then
328
+ # file.print( " tecs_this" )
329
+ # delim = ","
330
+ # end
331
+
332
+ i = 0
333
+ params.each{|param|
334
+ delim = ","
335
+ file.printf("#{delim} #{param.get_name}")
336
+ i += 1
337
+ }
338
+
339
+ while i < 5 do
340
+ delim = ","
341
+ file.printf("#{delim} 0")
342
+ i += 1
343
+ end
344
+
345
+ file.print(" );\n")
346
+
347
+ if !func_type.get_type.is_a?(VoidType)
348
+ file.print(" return retval;\n")
349
+ end
350
+
351
+ # 拡張サービスコール本体
352
+ if new_func
353
+ file2 = AppFile.open("#{$gen}/#{@ct_name_body}.c")
354
+
355
+ # if @@generated_celltype_header[ @ct_name_body ].nil?
356
+ # @@generated_celltype_header[ @ct_name_body ] = true
357
+ # p @@generated_celltype_header[ @ct_name_body ]
358
+ # file2.print <<EOT
359
+ # /*
360
+ # * このファイルは tecsgen により自動生成されました
361
+ # * このファイルを編集して使用することは、意図されていません
362
+ # */
363
+ # /* #[<PREAMBLE>]#
364
+ # * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
365
+ # * tecsmerge によるマージに使用されます
366
+ # *
367
+ # * #[</PREAMBLE>]# */
368
+ #
369
+ # /* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
370
+ # #include "#{@ct_name_body}_tecsgen.h"
371
+ #
372
+ # #ifndef E_OK
373
+ # #define E_OK 0 /* success */
374
+ # #define E_ID (-18) /* illegal ID */
375
+ # #endif
376
+ #
377
+ # EOT
378
+ # end
379
+
380
+ if func_type.get_type.is_a?(VoidType)
381
+ retval_assign = ""
382
+ retval_return = ""
383
+ else
384
+ retval_assign = "retval = (ER_UINT)"
385
+ retval_return = "retval"
386
+ end
387
+
388
+ file2.print <<EOT
389
+ ER_UINT
390
+ #{@ct_name_body}_#{func_name}(intptr_t par1, intptr_t par2, intptr_t par3, intptr_t par4, intptr_t par5, ID cdmid)
391
+ {
392
+ #{@ct_name_body}_CB *p_cellcb;
393
+ #if 0
394
+ if( VALID_IDX( idx ) ){
395
+ p_cellcb = #{@ct_name_body}_GET_CELLCB(idx);
396
+ }else{
397
+ /* エラー処理コードをここに記述 */
398
+ }
399
+ #else
400
+ p_cellcb = NULL;
401
+ #endif
402
+
403
+ ER_UINT retval = 0;
404
+
405
+ EOT
406
+
407
+ num = 1
408
+ params.each{|param|
409
+ if param.get_declarator.get_ptr_level > 0
410
+ if param.get_direction == :IN
411
+ file2.print <<EOT
412
+ if(prb_mem((void *)par#{num}, sizeof(#{param.get_type.get_type_str}), TSK_SELF, TPM_READ) != E_OK){
413
+ return E_MACV;
414
+ }
415
+ EOT
416
+
417
+ elsif param.get_direction == :OUT
418
+ file2.print <<EOT
419
+ if(prb_mem((void *)par#{num}, sizeof(#{param.get_type.get_type_str}), TSK_SELF, TPM_WRITE) != E_OK){
420
+ return E_MACV;
421
+ }
422
+ EOT
423
+
424
+ end
425
+ end
426
+ num += 1
427
+ }
428
+
429
+ file2.print" #{retval_assign}#{@call_port_name}_#{func_name}("
430
+
431
+ delim = ""
432
+ num = 1
433
+ params.each{|param|
434
+ file2.print delim.to_s
435
+ delim = ", "
436
+ file2.print "(#{param.get_type.get_type_str})"
437
+ file2.print "par" + num.to_s
438
+ file2.print param.get_type.get_type_str_post
439
+ num += 1
440
+ }
441
+
442
+ file2.print ");\n"
443
+
444
+ if !func_type.get_type.is_a?(VoidType)
445
+ file2.print "\n return #{retval_return};\n"
446
+ end
447
+ file2.print "}\n\n"
448
+
449
+ file2.close
450
+
451
+ file2 = AppFile.open("#{$gen}/tecsgen.cfg")
452
+ file2.print "\n/* Generated by HRP2SVCPlugin */\n\n"
453
+ # TODO: スタックサイズは適当
454
+ file2.print <<EOT
455
+ KERNEL_DOMAIN{
456
+ DEF_SVC( #{svcid}, { TA_NULL, #{@ct_name_body}_#{func_name}, 256 } );
457
+ }
458
+ EOT
459
+ file2.close
460
+
461
+ file2 = AppFile.open("#{$gen}/#{@ct_name_body}_factory.h")
462
+ file2.print "\n/* Generated by HRP2SVCPlugin */\n\n"
463
+ file2.print <<EOT
464
+ 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);
465
+ EOT
466
+ file2.close
467
+ end
468
+ else
469
+ # カーネルドメインのセルは特別なことは何もせず,普通に呼び出す
470
+ super
471
+ end
472
+ end
473
+ end