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,484 @@
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: TracePlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ class TracePlugin < ThroughPlugin
40
+ # @cellEntry_list::[ "Cell.eEntry", "Cell2.eEntry2", ... ]
41
+ # @b_generate::bool : true : TracePlugin を生成する必要がある
42
+
43
+ #=== TracePlugin の initialize
44
+ # 説明は ThroughPlugin (plugin.rb) を参照
45
+ def initialize(cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell)
46
+ @maxArrayDisplay = 16
47
+ @cellEntry_list = []
48
+ @probeName = ""
49
+ @b_generate = false
50
+ @b_displayTime = false
51
+ @kernelCelltype = :tKernel
52
+ @syslogCelltype = :tSysLog
53
+
54
+ super
55
+ @plugin_arg_check_proc_tab = TracePluginArgProc
56
+ parse_plugin_arg
57
+
58
+ if @cellEntry_list.length > 0
59
+ @cellEntry_list.each{|ce|
60
+ if "#{next_cell.get_name}.#{next_cell_port_name}".to_sym == ce.to_sym
61
+ @b_generate = true
62
+ end
63
+ }
64
+ else
65
+ @b_generate = true
66
+ end
67
+
68
+ if @b_generate == false
69
+ # 元々呼び出すセルに結合するものとする
70
+ @entry_port_name = next_cell_port_name
71
+ @cell_name = next_cell.get_name
72
+ end
73
+ end
74
+
75
+ #=== 宣言コードの生成
76
+ # typedef, signature, celltype など(cell 以外)のコードを生成
77
+ # 重複して生成してはならない(すでに生成されている場合は出力しないこと)
78
+ # file:: FILE 生成するファイル
79
+ def gen_plugin_decl_code(file)
80
+ # このセルタイプ(同じシグニチャ)は既に生成されているか?
81
+ if @@generated_celltype[@ct_name].nil?
82
+ @@generated_celltype[@ct_name] = [self]
83
+ else
84
+ @@generated_celltype[@ct_name] << self
85
+ return
86
+ end
87
+
88
+ file2 = CFile.open("#{$gen}/#{@ct_name}.cdl", "w")
89
+
90
+ send_receive = []
91
+ if !@signature.nil?
92
+ @signature.each_param{|fd, param|
93
+ dir = param.get_direction
94
+ case dir
95
+ when :SEND, :RECEIVE
96
+ send_receive << [dir, fd, param]
97
+ end
98
+ }
99
+ end
100
+
101
+ file2.print <<EOT
102
+ celltype #{@ct_name} {
103
+ EOT
104
+
105
+ if send_receive.length > 0
106
+ file2.print " [ allocator(\n"
107
+ delim = ""
108
+ send_receive.each {|a|
109
+ file2.print "#{delim}\t#{a[1].get_name}.#{a[2].get_name}<=#{@call_port_name}.#{a[1].get_name}.#{a[2].get_name}"
110
+ delim = ",\n"
111
+ }
112
+ file2.print "\n )]\n"
113
+ end
114
+
115
+ file2.print <<EOT
116
+ entry #{@signature.get_namespace_path} #{@entry_port_name};
117
+ call #{@signature.get_namespace_path} #{@call_port_name};
118
+ attr{
119
+ char_t *probeName_str = "";
120
+ char_t *from_str = "";
121
+ };
122
+ require #{@syslogCelltype}.eSysLog;
123
+ require #{@kernelCelltype}.eKernel;
124
+ };
125
+ EOT
126
+ # char_t *cell_port_name_str = "";
127
+
128
+ file2.close
129
+
130
+ file.print "import( \"#{$gen}/#{@ct_name}.cdl\" );\n"
131
+ end
132
+
133
+ def gen_through_cell_code(file)
134
+ gen_plugin_decl_code(file)
135
+
136
+ if @b_generate != false
137
+ nest = @region.gen_region_str_pre file
138
+ indent_str = " " * nest
139
+ if @next_cell_port_subscript
140
+ subscript = "[" + @next_cell_port_subscript.to_s + "]"
141
+ else
142
+ subscript = ""
143
+ end
144
+
145
+ if @probeName
146
+ probeName_str = "#{indent_str} probeName_str = \"" + @probeName + ": \";\n"
147
+ else
148
+ probeName_str = ""
149
+ end
150
+ if @caller_cell
151
+ caller_cell_str = "#{indent_str} from_str = \"#{@caller_cell.get_name}\";\n"
152
+ else
153
+ caller_cell_str = ""
154
+ end
155
+
156
+ file.print <<EOT
157
+ #{indent_str}cell #{@ct_name} #{@cell_name} {
158
+ #{indent_str} #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
159
+ #{probeName_str}#{caller_cell_str}#{indent_str}};
160
+ EOT
161
+ # cell_port_name_str = \"#{@next_cell.get_name}.#{@next_cell_port_name}\";
162
+ @region.gen_region_str_post file
163
+ end
164
+ end
165
+
166
+ 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)
167
+ if !func_type.get_type.is_void?
168
+ file.print("\t#{func_type.get_type_str}\tretval;\n")
169
+ end
170
+
171
+ file.print("\tSYSUTM\tutime;\n")
172
+
173
+ if !b_singleton
174
+
175
+ file.print <<EOT
176
+ \t#{ct_name}_CB *p_cellcb;
177
+ \tif( VALID_IDX( idx ) ){
178
+ \t\tp_cellcb = #{global_ct_name}_GET_CELLCB(idx);
179
+ \t}else{
180
+ \t\t/* put code here for error */
181
+ \t}
182
+
183
+ EOT
184
+ end
185
+
186
+ # p "celltype_name, sig_name, func_name, func_global_name"
187
+ # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}"
188
+
189
+
190
+ file.print <<EOT
191
+ \tgetMicroTime( &utime );
192
+ \tsyslog( LOG_INFO, \"Enter: %sTime=%d: #{@next_cell.get_name}.#{@next_cell_port_name}.#{func_name} calledFrom: %s\", ATTR_probeName_str, utime, ATTR_from_str );
193
+ EOT
194
+
195
+ print_params(params, file, 0, :IN)
196
+
197
+ delim = ""
198
+ if !func_type.get_type.is_void?
199
+ file.print("\tretval = ")
200
+ else
201
+ file.print("\t")
202
+ end
203
+
204
+ file.print("#{@call_port_name}_#{func_name}(")
205
+
206
+ params.each{|param|
207
+ file.printf("#{delim} #{param.get_name}")
208
+ delim = ","
209
+ }
210
+ file.print(" );\n")
211
+ if @next_cell_port_subscript
212
+ subscript = "[" + @next_cell_port_subscript.to_s + "]"
213
+ else
214
+ subscript = ""
215
+ end
216
+
217
+ file.print <<EOT
218
+ \tgetMicroTime( &utime );
219
+ \tsyslog( LOG_INFO, \"Leave: %sTime=%d: #{@next_cell.get_name}.#{@next_cell_port_name}#{subscript}.#{func_name}\", ATTR_probeName_str, utime );
220
+ EOT
221
+
222
+ print_params(params, file, 0, :OUT)
223
+
224
+ if !func_type.get_type.is_void?
225
+ print_param("retval", func_type.get_type, file, 0, :RETURN, func_type.get_type.get_type_str, nil, nil)
226
+ file.print("\treturn retval;\n")
227
+ end
228
+ end
229
+
230
+ def print_params(params, file, nest, direction)
231
+ params.each{|param|
232
+ dir = param.get_direction
233
+ if direction == :IN
234
+ case dir
235
+ when :IN, :INOUT, :SEND
236
+ print_param(param.get_name, param.get_type, file, nest, dir, param.get_type.get_type_str, nil, nil)
237
+ end
238
+ else
239
+ case dir
240
+ when :OUT, :INOUT
241
+ print_param(param.get_name, param.get_type, file, nest, dir, param.get_type.get_type_str, nil, nil)
242
+ when :RECEIVE
243
+ outer = "*"
244
+ outer2 = nil
245
+ print_param(param.get_name, param.get_type.get_referto, file, nest, dir,
246
+ param.get_type.get_referto.get_type_str, outer, outer2)
247
+ end
248
+ end
249
+ }
250
+ end
251
+
252
+ def print_param(name, type, file, nest, direction, type_str, outer, outer2, name_list = nil)
253
+ indent = " " * (nest + 1)
254
+
255
+ case type
256
+ when DefinedType
257
+ print_param(name, type.get_type, file, nest, direction, type_str, outer, outer2, name_list)
258
+ when VoidType
259
+ when BoolType
260
+ file.print("#{indent}syslog( LOG_INFO, \"#{indent}[#{direction}]#{type_str} #{outer}#{name}#{outer2} = %d;\", #{outer}#{name}#{outer2} );\n")
261
+ when IntType
262
+ file.print <<EOT
263
+ #{indent}if( sizeof(#{outer}#{name}#{outer2}) > sizeof(int_t) )
264
+ #{indent}\tsyslog( LOG_INFO, \"#{indent}[#{direction}]#{type_str} #{outer}#{name}#{outer2} = %ld;\", (long)#{outer}#{name}#{outer2} );
265
+ #{indent}else
266
+ #{indent}\tsyslog( LOG_INFO, \"#{indent}[#{direction}]#{type_str} #{outer}#{name}#{outer2} = %d;\", #{outer}#{name}#{outer2} );
267
+ EOT
268
+ # file.print( "#{indent}syslog( LOG_INFO, \"#{indent}[#{direction}]#{type_str} #{outer}#{name}#{outer2} = %ld;\", (long)#{outer}#{name}#{outer2} );\n" )
269
+ when FloatType
270
+ file.print("#{indent}syslog( LOG_INFO, \"#{indent}[#{direction}]#{type_str} #{outer}#{name}#{outer2} = %g;\", (double)#{outer}#{name}#{outer2} );\n")
271
+ when EnumType # mikan EnumType
272
+
273
+ when StructType
274
+ members_decl = type.get_members_decl
275
+ if outer || outer2
276
+ outer = "(#{outer}#{name}#{outer2})."
277
+ else
278
+ outer = "#{name}."
279
+ end
280
+ members_decl.get_items.each {|m|
281
+ print_param(m.get_name, m.get_type, file, nest, direction, m.get_type.get_type_str, outer, nil, members_decl)
282
+ }
283
+ when FuncType # mikan FuncType
284
+ when ArrayType # mikan ArrayType
285
+ when PtrType
286
+
287
+ se = type.get_size
288
+ ce = type.get_count
289
+ max_loop = @maxArrayDisplay
290
+ loop_count = nil
291
+
292
+ if se
293
+ loop_count = "(((#{se.to_str(name_list, outer, outer2)})>#{max_loop}) ? #{max_loop} : (#{se.to_str(name_list, outer, outer2)}))"
294
+ file.print("#{indent}syslog( LOG_INFO, \"#{indent}size_is(#{se.to_str(name_list, outer, outer2)})=%d\", #{se.to_str(name_list, outer, outer2)} );\n")
295
+ size = se.to_str(name_list, outer, outer2).to_s
296
+ elsif ce
297
+ loop_count = "(((#{ce.to_str(name_list, outer, outer2)})>#{max_loop}) ? #{max_loop} : (#{ce.to_str(name_list, outer, outer2)})) "
298
+ file.print("#{indent}syslog( LOG_INFO, \"#{indent}count_is(#{ce.to_str(name_list, outer, outer2)})=%d\", #{ce.to_str(name_list, outer, outer2)} );\n")
299
+ size = ce.to_str(name_list, outer, outer2).to_s
300
+ end
301
+
302
+ # mikan PtrType: string
303
+
304
+ referto = type.get_referto
305
+ type0 = type
306
+ type = referto
307
+ type_str = type.get_type_str
308
+ if type.is_a?(DefinedType)
309
+ type = type.get_original_type
310
+ end
311
+
312
+ if type0.is_nullable?
313
+ nest += 1
314
+ indent0 = indent
315
+ outer0 = outer
316
+ outer20 = outer2
317
+ indent += " "
318
+ file.print"#{indent0}if( #{outer}#{name}#{outer2} ){\n"
319
+ end
320
+
321
+ if loop_count.nil?
322
+ case type
323
+ when StructType
324
+ members = type.get_members_decl
325
+ if outer || outer2
326
+ outer = "(#{outer}#{name}#{outer2})->"
327
+ else
328
+ outer = "#{name}->"
329
+ end
330
+ outer2 = nil
331
+ members.get_items.each {|m|
332
+ print_param(m.get_name, m.get_type, file, nest, direction, m.get_type.get_type_str, outer, outer2, members)
333
+ }
334
+ when FuncType # mikan FuncType
335
+ when ArrayType # mikan ArrayType
336
+ when BoolType, IntType, FloatType, EnumType, PtrType
337
+ outer = "*#{outer}"
338
+ outer2 = outer2.to_s
339
+ print_param(name, type, file, nest, direction, type_str, outer, outer2)
340
+ end
341
+ else # loop_count != nil
342
+ if type.is_a?(PtrType) || type.is_a?(StructType)
343
+ num_per_loop = 1
344
+ else
345
+ num_per_loop = 4
346
+ end
347
+
348
+ file.print <<EOT
349
+ #{indent}{
350
+ #{indent}\tint i__#{nest}, loop_count__ = #{loop_count};
351
+ #{indent}\tfor( i__#{nest} = 0; i__#{nest} < loop_count__; i__#{nest}+=#{num_per_loop} ){
352
+ EOT
353
+
354
+ case type
355
+ when StructType
356
+ members = type.get_members_decl
357
+ if outer || outer2
358
+ outer = "(#{outer}#{name}#{outer2})[i__#{nest}]."
359
+ else
360
+ outer = "#{name}[i__#{nest}]."
361
+ end
362
+ members.get_items.each {|m|
363
+ print_param(m.get_name, m.get_type, file, nest + 1, direction, m.get_type.get_type_str, outer, nil, members)
364
+ }
365
+ when FuncType # mikan FuncType
366
+ when ArrayType # mikan ArrayType
367
+
368
+ when BoolType, FloatType
369
+ if outer || outer2
370
+ outer = "(#{outer}"
371
+ outer2 = "#{outer2})"
372
+ end
373
+
374
+ file.print <<EOT
375
+ #{indent}\t\tsyslog( LOG_INFO, \"#{indent}[#{direction}]#{type_str} #{name}[%d]: %d %d %d %d\",
376
+ #{indent}\t\t\t\ti__#{nest}, #{outer}#{name}#{outer2}[i__#{nest}], #{outer}#{name}#{outer2}[i__#{nest}+1], #{outer}#{name}#{outer2}[i__#{nest}+2], #{outer}#{name}#{outer2}[i__#{nest}+3] );
377
+ EOT
378
+ when IntType
379
+ if outer || outer2
380
+ outer = "(#{outer}"
381
+ outer2 = "#{outer2})"
382
+ end
383
+
384
+ file.print <<EOT
385
+ #{indent}\t\tif( sizeof(#{outer}#{name}#{outer2}) > sizeof(int_t) )
386
+ #{indent}\t\t\tsyslog( LOG_INFO, \"#{indent}[#{direction}]#{type_str} #{name}[%d]: %02x %02x %02x %02x\",
387
+ #{indent}\t\t\t\t\ti__#{nest}, #{outer}#{name}#{outer2}[i__#{nest}], #{outer}#{name}#{outer2}[i__#{nest}+1], #{outer}#{name}#{outer2}[i__#{nest}+2], #{outer}#{name}#{outer2}[i__#{nest}+3] );
388
+ #{indent}\t\telse
389
+ #{indent}\t\t\tsyslog( LOG_INFO, \"#{indent}[#{direction}]#{type_str} #{name}[%d]: %02lx %02lx %02lx %02lx\",
390
+ #{indent}\t\t\t\t\ti__#{nest}, #{outer}#{name}#{outer2}[i__#{nest}], #{outer}#{name}#{outer2}[i__#{nest}+1], #{outer}#{name}#{outer2}[i__#{nest}+2], #{outer}#{name}#{outer2}[i__#{nest}+3] );
391
+ EOT
392
+
393
+ when PtrType
394
+ # type = type.get_referto
395
+ if outer || outer2
396
+ outer = "(#{outer}"
397
+ outer2 = "#{outer2})[i__#{nest}]"
398
+ else
399
+ outer = ""
400
+ outer2 = "[i__#{nest}]"
401
+ end
402
+ print_param(name, type, file, nest + 1, direction, type_str, outer, outer2)
403
+ end
404
+
405
+ file.print <<EOT
406
+ #{indent}\t} /* for ( i__#{nest} ) */
407
+ #{indent}\tif( i__#{nest} < #{size} )
408
+ #{indent}\t\tsyslog( LOG_INFO, \"#{indent}(%d elements are omitted)\", #{size} - i__#{nest} );
409
+ #{indent}\telse if( i__#{nest} > #{size} )
410
+ #{indent}\t\tsyslog( LOG_INFO, \"#{indent}(last %d elements are void)\", i__#{nest} - #{size} );
411
+ #{indent}}
412
+ EOT
413
+ end # loop_count == nil
414
+
415
+ if type0.is_nullable?
416
+ file.print <<EOT
417
+ #{indent0}} else {
418
+ #{indent0} syslog( LOG_INFO, \"#{indent0}[#{direction}]#{outer0}#{name}#{outer20} = NULL\" );
419
+ #{indent0}}
420
+ EOT
421
+ end
422
+ end
423
+ end
424
+
425
+ # プラグイン引数名と Proc
426
+ TracePluginArgProc = {
427
+ "maxArrayDisplay" => Proc.new {|obj, rhs| obj.set_maxArrayDisplay rhs },
428
+ "cellEntry" => Proc.new {|obj, rhs| obj.set_cellEntry rhs },
429
+ "probeName" => Proc.new {|obj, rhs| obj.set_probeName rhs },
430
+ "displayTime" => Proc.new {|obj, rhs| obj.set_displayTime rhs },
431
+ "kernelCelltype" => Proc.new {|obj, rhs| obj.set_kernelCelltype rhs },
432
+ "syslogCelltype" => Proc.new {|obj, rhs| obj.set_syslogCelltype rhs },
433
+ }
434
+
435
+ def set_maxArrayDisplay(rhs)
436
+ @maxArrayDisplay = rhs
437
+ end
438
+
439
+ def set_cellEntry(rhs)
440
+ ces = rhs.to_s.split /\s*,\s*/
441
+ ces.each{|ce|
442
+ if ce =~ /^[A-Za-z_]\w*\.[A-Za-z_]\w*$/
443
+ # OK
444
+ else
445
+ cdl_error("#{ce}: TracePlugin arg not in \"symbol.symbol\" form")
446
+ end
447
+ }
448
+ @cellEntry_list.concat ces
449
+ end
450
+
451
+ def set_probeName(rhs)
452
+ @probeName = rhs.to_s
453
+ end
454
+
455
+ def set_displayTime(rhs)
456
+ if rhs.to_s == "true"
457
+ @b_diplayTime = true
458
+ elsif rhs.to_s == "false"
459
+ @b_diplayTime = false
460
+ else
461
+ cdl_error("displayTime : #{rhs} unsuitable: specify true or false")
462
+ end
463
+ end
464
+
465
+ #=== プラグイン引数 tKernel のチェック
466
+ def set_kernelCelltype(rhs)
467
+ @kernelCelltype = rhs.to_sym
468
+ nsp = NamespacePath.analyze(@kernelCelltype.to_s)
469
+ obj = Namespace.find(nsp)
470
+ if !obj.instance_of?(Celltype) && !obj.instance_of?(CompositeCelltype)
471
+ cdl_error("TracePlugin: kernelCelltype '#{rhs}' not celltype or not defined")
472
+ end
473
+ end
474
+
475
+ #=== プラグイン引数 tSyslog のチェック
476
+ def set_syslogCelltype(rhs)
477
+ @syslogCelltype = rhs.to_sym
478
+ nsp = NamespacePath.analyze(@syslogCelltype.to_s)
479
+ obj = Namespace.find(nsp)
480
+ if !obj.instance_of?(Celltype) && !obj.instance_of?(CompositeCelltype)
481
+ cdl_error("TracePlugin: syslogCelltype '#{rhs}' not celltype or not defined")
482
+ end
483
+ end
484
+ end