cosmos 4.0.3-java

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 (1491) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitattributes +3 -0
  4. data/.gitignore +48 -0
  5. data/.rubocop.yml +23 -0
  6. data/.travis.yml +10 -0
  7. data/.yardopts +3 -0
  8. data/CONTRIBUTING.txt +50 -0
  9. data/Gemfile +10 -0
  10. data/Guardfile +27 -0
  11. data/LICENSE.txt +879 -0
  12. data/Manifest.txt +1549 -0
  13. data/README.md +111 -0
  14. data/Rakefile +264 -0
  15. data/autohotkey/config/data/attitude.bin +0 -0
  16. data/autohotkey/config/data/diamond.STL +58 -0
  17. data/autohotkey/config/data/groundoff.gif +0 -0
  18. data/autohotkey/config/data/groundon.gif +0 -0
  19. data/autohotkey/config/data/position.bin +0 -0
  20. data/autohotkey/config/data/satellite.gif +0 -0
  21. data/autohotkey/config/data/tada.wav +0 -0
  22. data/autohotkey/config/system/system.txt +29 -0
  23. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +126 -0
  24. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -0
  25. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -0
  26. data/autohotkey/config/targets/INST/doc/README.txt +1 -0
  27. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -0
  28. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -0
  29. data/autohotkey/config/targets/INST/screens/_footer.txt +4 -0
  30. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -0
  31. data/autohotkey/config/targets/INST/screens/array.txt +7 -0
  32. data/autohotkey/config/targets/INST/screens/block.txt +8 -0
  33. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -0
  34. data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
  35. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -0
  36. data/autohotkey/config/targets/INST/screens/ground.txt +25 -0
  37. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -0
  38. data/autohotkey/config/targets/INST/screens/hs.txt +46 -0
  39. data/autohotkey/config/targets/INST/screens/image.txt +21 -0
  40. data/autohotkey/config/targets/INST/screens/latest.txt +23 -0
  41. data/autohotkey/config/targets/INST/screens/mech.txt +25 -0
  42. data/autohotkey/config/targets/INST/screens/other.txt +25 -0
  43. data/autohotkey/config/targets/INST/screens/params.txt +25 -0
  44. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -0
  45. data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
  46. data/autohotkey/config/targets/INST/target.txt +27 -0
  47. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
  48. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -0
  49. data/autohotkey/config/targets/META/screens/data.txt +12 -0
  50. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  51. data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  52. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  53. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  54. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -0
  55. data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
  56. data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
  57. data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
  58. data/autohotkey/config/tools/cmd_sender/cmd_sender.txt +1 -0
  59. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -0
  60. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -0
  61. data/autohotkey/config/tools/handbook_creator/default_toc.xsl +59 -0
  62. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -0
  63. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  64. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  65. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  66. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -0
  67. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  68. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  69. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  70. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  71. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  72. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  73. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  74. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  75. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -0
  76. data/autohotkey/config/tools/launcher/launcher.txt +38 -0
  77. data/autohotkey/config/tools/limits_monitor/README.txt +1 -0
  78. data/autohotkey/config/tools/opengl_builder/error.txt +1 -0
  79. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -0
  80. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -0
  81. data/autohotkey/config/tools/table_manager/OldOneDimensionalTable_def.txt +19 -0
  82. data/autohotkey/config/tools/table_manager/OldTwoDimensionalTable_def.txt +248 -0
  83. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +31 -0
  84. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +28 -0
  85. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -0
  86. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -0
  87. data/autohotkey/config/tools/test_runner/test_runner3.txt +7 -0
  88. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -0
  89. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +14 -0
  90. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -0
  91. data/autohotkey/config/tools/tlm_grapher/README.txt +1 -0
  92. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -0
  93. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -0
  94. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -0
  95. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -0
  96. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -0
  97. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -0
  98. data/autohotkey/lib/example_background_task.rb +42 -0
  99. data/autohotkey/lib/user_version.rb +3 -0
  100. data/autohotkey/procedures/clear_util.rb +7 -0
  101. data/autohotkey/procedures/collect.rb +18 -0
  102. data/autohotkey/procedures/collect_util.rb +14 -0
  103. data/autohotkey/procedures/example_test.rb +71 -0
  104. data/autohotkey/procedures/example_test2.rb +74 -0
  105. data/autohotkey/procedures/script_test.rb +21 -0
  106. data/autohotkey/procedures/syntax_error.rb +18 -0
  107. data/autohotkey/tools/CmdExtractorAHK +16 -0
  108. data/autohotkey/tools/CmdSender +14 -0
  109. data/autohotkey/tools/CmdSenderAHK +18 -0
  110. data/autohotkey/tools/CmdSequence +14 -0
  111. data/autohotkey/tools/CmdSequenceAHK +23 -0
  112. data/autohotkey/tools/CmdSequenceAHK2 +16 -0
  113. data/autohotkey/tools/CmdTlmServer +14 -0
  114. data/autohotkey/tools/CmdTlmServerAHK +28 -0
  115. data/autohotkey/tools/CmdTlmServerAHK2 +17 -0
  116. data/autohotkey/tools/ConfigEditor +16 -0
  117. data/autohotkey/tools/DataViewer +14 -0
  118. data/autohotkey/tools/DataViewerAHK +17 -0
  119. data/autohotkey/tools/HandbookCreatorAHK +20 -0
  120. data/autohotkey/tools/LauncherAHK +17 -0
  121. data/autohotkey/tools/LimitsMonitorAHK +20 -0
  122. data/autohotkey/tools/OpenGLBuilderAHK +24 -0
  123. data/autohotkey/tools/PacketViewer +14 -0
  124. data/autohotkey/tools/PacketViewerAHK +18 -0
  125. data/autohotkey/tools/PacketViewerAHK2 +17 -0
  126. data/autohotkey/tools/Replay +14 -0
  127. data/autohotkey/tools/ReplayAHK +17 -0
  128. data/autohotkey/tools/ScriptRunner +14 -0
  129. data/autohotkey/tools/ScriptRunnerAHK +20 -0
  130. data/autohotkey/tools/ScriptRunnerAHK2 +17 -0
  131. data/autohotkey/tools/TableManager +14 -0
  132. data/autohotkey/tools/TableManagerAHK +25 -0
  133. data/autohotkey/tools/TableManagerAHK2 +18 -0
  134. data/autohotkey/tools/TableManagerAHK3 +18 -0
  135. data/autohotkey/tools/TableManagerAHK4 +24 -0
  136. data/autohotkey/tools/TestRunner +15 -0
  137. data/autohotkey/tools/TestRunnerAHK +17 -0
  138. data/autohotkey/tools/TestRunnerAHK2 +17 -0
  139. data/autohotkey/tools/TestRunnerAHK3 +17 -0
  140. data/autohotkey/tools/TestRunnerAHK4 +17 -0
  141. data/autohotkey/tools/TestRunnerAHK5 +17 -0
  142. data/autohotkey/tools/TestRunnerAHK6 +17 -0
  143. data/autohotkey/tools/TlmExtractor +15 -0
  144. data/autohotkey/tools/TlmExtractorAHK +19 -0
  145. data/autohotkey/tools/TlmExtractorAHK2 +16 -0
  146. data/autohotkey/tools/TlmExtractorAHK3 +16 -0
  147. data/autohotkey/tools/TlmGrapher +14 -0
  148. data/autohotkey/tools/TlmGrapherAHK +19 -0
  149. data/autohotkey/tools/TlmGrapherAHK2 +23 -0
  150. data/autohotkey/tools/TlmGrapherAHK3 +17 -0
  151. data/autohotkey/tools/TlmGrapherAHK4 +17 -0
  152. data/autohotkey/tools/TlmViewer +14 -0
  153. data/autohotkey/tools/TlmViewerAHK +28 -0
  154. data/autohotkey/tools/TlmViewerAHK2 +22 -0
  155. data/autohotkey/tools/TlmViewerAHK3 +23 -0
  156. data/autohotkey/tools/TlmViewerAHK4 +22 -0
  157. data/autohotkey/tools/TlmViewerAHK5 +18 -0
  158. data/autohotkey/tools/autohotkey.rb +38 -0
  159. data/autohotkey/tools/cmd_extractor.ahk +50 -0
  160. data/autohotkey/tools/cmd_sender.ahk +180 -0
  161. data/autohotkey/tools/cmd_sequence.ahk +215 -0
  162. data/autohotkey/tools/cmd_sequence2.ahk +23 -0
  163. data/autohotkey/tools/cmd_tlm_server.ahk +90 -0
  164. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -0
  165. data/autohotkey/tools/data_viewer.ahk +140 -0
  166. data/autohotkey/tools/handbook_creator.ahk +32 -0
  167. data/autohotkey/tools/launcher.ahk +41 -0
  168. data/autohotkey/tools/limits_monitor.ahk +121 -0
  169. data/autohotkey/tools/open_gl_builder.ahk +133 -0
  170. data/autohotkey/tools/packet_viewer.ahk +217 -0
  171. data/autohotkey/tools/packet_viewer2.ahk +9 -0
  172. data/autohotkey/tools/replay.ahk +103 -0
  173. data/autohotkey/tools/script_runner.ahk +588 -0
  174. data/autohotkey/tools/script_runner2.ahk +50 -0
  175. data/autohotkey/tools/table_manager.ahk +291 -0
  176. data/autohotkey/tools/test_runner.ahk +262 -0
  177. data/autohotkey/tools/test_runner2.ahk +49 -0
  178. data/autohotkey/tools/test_runner3.ahk +11 -0
  179. data/autohotkey/tools/test_runner5.ahk +8 -0
  180. data/autohotkey/tools/test_runner6.ahk +5 -0
  181. data/autohotkey/tools/tlm_extractor.ahk +357 -0
  182. data/autohotkey/tools/tlm_grapher.ahk +658 -0
  183. data/autohotkey/tools/tlm_grapher2.ahk +115 -0
  184. data/autohotkey/tools/tlm_grapher3.ahk +23 -0
  185. data/autohotkey/tools/tlm_viewer.ahk +140 -0
  186. data/autohotkey/tools/tlm_viewer2.ahk +49 -0
  187. data/autohotkey/tools/tlm_viewer4.ahk +4 -0
  188. data/autohotkey/tools/tlm_viewer5.ahk +19 -0
  189. data/autohotkey/tools/tool_launch.rb +38 -0
  190. data/bin/cosmos +266 -0
  191. data/bin/cstol_converter +1166 -0
  192. data/bin/exchndl20-x64.dll +0 -0
  193. data/bin/exchndl20.dll +0 -0
  194. data/bin/exchndl21-x64.dll +0 -0
  195. data/bin/exchndl21.dll +0 -0
  196. data/bin/exchndl22-x64.dll +0 -0
  197. data/bin/exchndl22.dll +0 -0
  198. data/bin/mgwhelp-x64.dll +0 -0
  199. data/bin/mgwhelp.dll +0 -0
  200. data/bin/rubysloc +85 -0
  201. data/bin/xtce_converter +83 -0
  202. data/cosmos.gemspec +109 -0
  203. data/data/COSMOS_64x64.bmp +0 -0
  204. data/data/COSMOS_64x64.ico +0 -0
  205. data/data/COSMOS_64x64.png +0 -0
  206. data/data/COSMOS_Architecture.png +0 -0
  207. data/data/CheckBoxCheck.gif +0 -0
  208. data/data/CheckBoxEmpty.gif +0 -0
  209. data/data/Earthmap1024x512.gif +0 -0
  210. data/data/about.txt +4 -0
  211. data/data/add_database.png +0 -0
  212. data/data/add_plot.png +0 -0
  213. data/data/add_tab.png +0 -0
  214. data/data/blank.png +0 -0
  215. data/data/bug.png +0 -0
  216. data/data/checkmark.png +0 -0
  217. data/data/close.png +0 -0
  218. data/data/cmd_extractor.png +0 -0
  219. data/data/cmd_sender.png +0 -0
  220. data/data/cmd_sequence.png +0 -0
  221. data/data/config/_array_params.yaml +23 -0
  222. data/data/config/_id_items.yaml +24 -0
  223. data/data/config/_id_params.yaml +58 -0
  224. data/data/config/_interfaces.yaml +206 -0
  225. data/data/config/_items.yaml +20 -0
  226. data/data/config/_params.yaml +58 -0
  227. data/data/config/cmd_tlm_server.yaml +124 -0
  228. data/data/config/command.yaml +40 -0
  229. data/data/config/command_modifiers.yaml +145 -0
  230. data/data/config/command_telemetry.yaml +3 -0
  231. data/data/config/data_viewer.yaml +43 -0
  232. data/data/config/handbook_creator.yaml +23 -0
  233. data/data/config/housekeeping_params.yaml +71 -0
  234. data/data/config/interface_modifiers.yaml +44 -0
  235. data/data/config/item_modifiers.yaml +211 -0
  236. data/data/config/launcher.yaml +117 -0
  237. data/data/config/limits_monitor.yaml +53 -0
  238. data/data/config/linegraph_params.yaml +30 -0
  239. data/data/config/linegraph_plot.yaml +106 -0
  240. data/data/config/page_modifiers.yaml +128 -0
  241. data/data/config/param_item_modifiers.yaml +46 -0
  242. data/data/config/parameter_modifiers.yaml +180 -0
  243. data/data/config/protocols.yaml +273 -0
  244. data/data/config/screen.yaml +151 -0
  245. data/data/config/script_runner.yaml +15 -0
  246. data/data/config/system.yaml +247 -0
  247. data/data/config/table_manager.yaml +76 -0
  248. data/data/config/table_parameter_modifiers.yaml +9 -0
  249. data/data/config/target.yaml +80 -0
  250. data/data/config/telemetry.yaml +80 -0
  251. data/data/config/telemetry_modifiers.yaml +142 -0
  252. data/data/config/test_runner.yaml +118 -0
  253. data/data/config/tlm_extractor.yaml +109 -0
  254. data/data/config/tlm_grapher.yaml +78 -0
  255. data/data/config/tlm_viewer.yaml +112 -0
  256. data/data/config/unknown.yaml +3 -0
  257. data/data/config/widgets.yaml +1339 -0
  258. data/data/config/xy_params.yaml +50 -0
  259. data/data/config/xy_plot.yaml +12 -0
  260. data/data/config_editor.png +0 -0
  261. data/data/copy.png +0 -0
  262. data/data/cosmos.xcf +0 -0
  263. data/data/cosmos_word.gif +0 -0
  264. data/data/crc.txt +351 -0
  265. data/data/critical.wav +0 -0
  266. data/data/cts.png +0 -0
  267. data/data/cut.png +0 -0
  268. data/data/data_viewer.png +0 -0
  269. data/data/delete.png +0 -0
  270. data/data/delete_database.png +0 -0
  271. data/data/delete_plot.png +0 -0
  272. data/data/delete_tab.png +0 -0
  273. data/data/diamond.STL +58 -0
  274. data/data/disconnected.png +0 -0
  275. data/data/edit.png +0 -0
  276. data/data/edit_database.png +0 -0
  277. data/data/edit_plot.png +0 -0
  278. data/data/edit_tab.png +0 -0
  279. data/data/end-26.png +0 -0
  280. data/data/fast_forward-26.png +0 -0
  281. data/data/file.png +0 -0
  282. data/data/handbook_creator.png +0 -0
  283. data/data/help.png +0 -0
  284. data/data/html-32.png +0 -0
  285. data/data/information.wav +0 -0
  286. data/data/input.wav +0 -0
  287. data/data/launcher.png +0 -0
  288. data/data/legal.gif +0 -0
  289. data/data/legal.txt +8 -0
  290. data/data/limits_monitor.png +0 -0
  291. data/data/message.wav +0 -0
  292. data/data/moonmap1k.gif +0 -0
  293. data/data/multi.png +0 -0
  294. data/data/open.png +0 -0
  295. data/data/open_in_browser-32.png +0 -0
  296. data/data/opengl_builder.png +0 -0
  297. data/data/packet_viewer.png +0 -0
  298. data/data/pdf-32.png +0 -0
  299. data/data/play-26.png +0 -0
  300. data/data/question.wav +0 -0
  301. data/data/redo.png +0 -0
  302. data/data/replay.png +0 -0
  303. data/data/reverse-play-26.png +0 -0
  304. data/data/rewind-26.png +0 -0
  305. data/data/running.png +0 -0
  306. data/data/save.png +0 -0
  307. data/data/save_as.png +0 -0
  308. data/data/screenshot.png +0 -0
  309. data/data/script_runner.png +0 -0
  310. data/data/search-14.png +0 -0
  311. data/data/search.png +0 -0
  312. data/data/send_file.png +0 -0
  313. data/data/skip_to_start-26.png +0 -0
  314. data/data/spinner.gif +0 -0
  315. data/data/splash.gif +0 -0
  316. data/data/stop-26.png +0 -0
  317. data/data/table_manager.png +0 -0
  318. data/data/test_runner.png +0 -0
  319. data/data/tlm_extractor.png +0 -0
  320. data/data/tlm_grapher.png +0 -0
  321. data/data/tlm_viewer.png +0 -0
  322. data/data/undo.png +0 -0
  323. data/data/warning.wav +0 -0
  324. data/demo/Gemfile +10 -0
  325. data/demo/Launcher +16 -0
  326. data/demo/Launcher.bat +9 -0
  327. data/demo/Rakefile +77 -0
  328. data/demo/config/data/attitude.bin +0 -0
  329. data/demo/config/data/crc.txt +258 -0
  330. data/demo/config/data/diamond.STL +58 -0
  331. data/demo/config/data/groundoff.gif +0 -0
  332. data/demo/config/data/groundon.gif +0 -0
  333. data/demo/config/data/hselectoff.gif +0 -0
  334. data/demo/config/data/hselecton.gif +0 -0
  335. data/demo/config/data/hswitchoff.gif +0 -0
  336. data/demo/config/data/hswitchon.gif +0 -0
  337. data/demo/config/data/meta_init.txt +1 -0
  338. data/demo/config/data/position.bin +0 -0
  339. data/demo/config/data/poweroff.gif +0 -0
  340. data/demo/config/data/poweron.gif +0 -0
  341. data/demo/config/data/satellite.gif +0 -0
  342. data/demo/config/data/tada.wav +0 -0
  343. data/demo/config/data/vswitchoff.gif +0 -0
  344. data/demo/config/data/vswitchon.gif +0 -0
  345. data/demo/config/system/system.txt +47 -0
  346. data/demo/config/system/system2.txt +43 -0
  347. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -0
  348. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -0
  349. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -0
  350. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +18 -0
  351. data/demo/config/targets/EXAMPLE/target.txt +9 -0
  352. data/demo/config/targets/INST/cmd_tlm/_ccsds_cmd.txt +9 -0
  353. data/demo/config/targets/INST/cmd_tlm/_ccsds_tlm.txt +19 -0
  354. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +57 -0
  355. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +164 -0
  356. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -0
  357. data/demo/config/targets/INST/doc/README.txt +1 -0
  358. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -0
  359. data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
  360. data/demo/config/targets/INST/lib/sim_inst.rb +321 -0
  361. data/demo/config/targets/INST/procedures/checks.rb +11 -0
  362. data/demo/config/targets/INST/procedures/collect.rb +18 -0
  363. data/demo/config/targets/INST/procedures/disconnect.rb +29 -0
  364. data/demo/config/targets/INST/procedures/utilities/clear.rb +7 -0
  365. data/demo/config/targets/INST/procedures/utilities/collect.rb +14 -0
  366. data/demo/config/targets/INST/screens/_footer.txt +4 -0
  367. data/demo/config/targets/INST/screens/adcs.txt +70 -0
  368. data/demo/config/targets/INST/screens/array.txt +15 -0
  369. data/demo/config/targets/INST/screens/block.txt +8 -0
  370. data/demo/config/targets/INST/screens/commanding.txt +37 -0
  371. data/demo/config/targets/INST/screens/graphs.txt +14 -0
  372. data/demo/config/targets/INST/screens/ground.txt +25 -0
  373. data/demo/config/targets/INST/screens/hs.txt +42 -0
  374. data/demo/config/targets/INST/screens/latest.txt +23 -0
  375. data/demo/config/targets/INST/screens/limits.txt +43 -0
  376. data/demo/config/targets/INST/screens/other.txt +24 -0
  377. data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
  378. data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
  379. data/demo/config/targets/INST/screens/tabs.txt +68 -0
  380. data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
  381. data/demo/config/targets/INST/tables/EventAction.csv +9 -0
  382. data/demo/config/targets/INST/tables/EventAction.dat +0 -0
  383. data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
  384. data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
  385. data/demo/config/targets/INST/target.txt +37 -0
  386. data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
  387. data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
  388. data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
  389. data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
  390. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +6 -0
  391. data/demo/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  392. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -0
  393. data/demo/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  394. data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  395. data/demo/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  396. data/demo/config/targets/SYSTEM/lib/limits_groups.rb +55 -0
  397. data/demo/config/targets/SYSTEM/screens/status.txt +12 -0
  398. data/demo/config/targets/SYSTEM/target.txt +12 -0
  399. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -0
  400. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -0
  401. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -0
  402. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +59 -0
  403. data/demo/config/targets/TEMPLATED/target.txt +8 -0
  404. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +49 -0
  405. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +42 -0
  406. data/demo/config/tools/data_viewer/data_viewer.txt +20 -0
  407. data/demo/config/tools/example_application.css +58 -0
  408. data/demo/config/tools/handbook_creator/default_toc.xsl +59 -0
  409. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -0
  410. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -0
  411. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  412. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  413. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -0
  414. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  415. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  416. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  417. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  418. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  419. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  420. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -0
  421. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  422. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -0
  423. data/demo/config/tools/launcher/launcher.css +7 -0
  424. data/demo/config/tools/launcher/launcher.txt +48 -0
  425. data/demo/config/tools/launcher/launcher2.css +10 -0
  426. data/demo/config/tools/launcher/launcher2.txt +48 -0
  427. data/demo/config/tools/launcher/launcher_mini.txt +45 -0
  428. data/demo/config/tools/limits_monitor/README.txt +1 -0
  429. data/demo/config/tools/opengl_builder/README.txt +1 -0
  430. data/demo/config/tools/script_runner/script_runner.txt +3 -0
  431. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -0
  432. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  433. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +37 -0
  434. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +34 -0
  435. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +9 -0
  436. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +31 -0
  437. data/demo/config/tools/test_runner/test_runner.css +45 -0
  438. data/demo/config/tools/test_runner/test_runner.txt +17 -0
  439. data/demo/config/tools/tlm_extractor/_adcs_time.txt +2 -0
  440. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  441. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  442. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  443. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  444. data/demo/config/tools/tlm_grapher/README.txt +1 -0
  445. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
  446. data/demo/lib/example_background_task.rb +55 -0
  447. data/demo/lib/example_target.rb +103 -0
  448. data/demo/lib/scpi_target.rb +68 -0
  449. data/demo/lib/user_version.rb +3 -0
  450. data/demo/procedures/cosmos_api_test.rb +310 -0
  451. data/demo/procedures/example_test.rb +192 -0
  452. data/demo/procedures/plot_test.rb +8 -0
  453. data/demo/procedures/run_example_test.rb +3 -0
  454. data/demo/procedures/test.rb +51 -0
  455. data/demo/tools/CmdExtractor +16 -0
  456. data/demo/tools/CmdExtractor.bat +9 -0
  457. data/demo/tools/CmdSender +16 -0
  458. data/demo/tools/CmdSender.bat +9 -0
  459. data/demo/tools/CmdSequence +16 -0
  460. data/demo/tools/CmdSequence.bat +9 -0
  461. data/demo/tools/CmdTlmServer +16 -0
  462. data/demo/tools/CmdTlmServer.bat +9 -0
  463. data/demo/tools/ConfigEditor +16 -0
  464. data/demo/tools/ConfigEditor.bat +9 -0
  465. data/demo/tools/DataViewer +16 -0
  466. data/demo/tools/DataViewer.bat +9 -0
  467. data/demo/tools/ExampleTarget +16 -0
  468. data/demo/tools/ExampleTarget.bat +9 -0
  469. data/demo/tools/HandbookCreator +16 -0
  470. data/demo/tools/HandbookCreator.bat +9 -0
  471. data/demo/tools/Launcher +16 -0
  472. data/demo/tools/Launcher.bat +9 -0
  473. data/demo/tools/LimitsMonitor +16 -0
  474. data/demo/tools/LimitsMonitor.bat +9 -0
  475. data/demo/tools/OpenGLBuilder +16 -0
  476. data/demo/tools/OpenGLBuilder.bat +9 -0
  477. data/demo/tools/PacketViewer +16 -0
  478. data/demo/tools/PacketViewer.bat +9 -0
  479. data/demo/tools/Replay +16 -0
  480. data/demo/tools/Replay.bat +9 -0
  481. data/demo/tools/ScpiTarget +16 -0
  482. data/demo/tools/ScpiTarget.bat +9 -0
  483. data/demo/tools/ScriptRunner +16 -0
  484. data/demo/tools/ScriptRunner.bat +9 -0
  485. data/demo/tools/TableManager +16 -0
  486. data/demo/tools/TableManager.bat +9 -0
  487. data/demo/tools/TestRunner +16 -0
  488. data/demo/tools/TestRunner.bat +9 -0
  489. data/demo/tools/TlmExtractor +16 -0
  490. data/demo/tools/TlmExtractor.bat +9 -0
  491. data/demo/tools/TlmGrapher +16 -0
  492. data/demo/tools/TlmGrapher.bat +9 -0
  493. data/demo/tools/TlmViewer +16 -0
  494. data/demo/tools/TlmViewer.bat +9 -0
  495. data/demo/tools/ToolLaunch.bat +72 -0
  496. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  497. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  498. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  499. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  500. data/demo/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  501. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  502. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  503. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  504. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  505. data/demo/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  506. data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  507. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  508. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  509. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  510. data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  511. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  512. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  513. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  514. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  515. data/demo/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  516. data/demo/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  517. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  518. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  519. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  520. data/demo/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  521. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  522. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  523. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  524. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  525. data/demo/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  526. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  527. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  528. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  529. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  530. data/demo/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  531. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  532. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  533. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  534. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  535. data/demo/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  536. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  537. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  538. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  539. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  540. data/demo/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  541. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  542. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  543. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  544. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  545. data/demo/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  546. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  547. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  548. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  549. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  550. data/demo/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  551. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -0
  552. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  553. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  554. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  555. data/demo/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  556. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  557. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  558. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  559. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  560. data/demo/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  561. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  562. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  563. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  564. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  565. data/demo/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  566. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  567. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  568. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  569. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  570. data/demo/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  571. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  572. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  573. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  574. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  575. data/demo/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  576. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  577. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  578. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  579. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  580. data/demo/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  581. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  582. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  583. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  584. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  585. data/demo/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  586. data/demo/tools/tool_launch.rb +38 -0
  587. data/ext/cosmos/ext/array/array.c +111 -0
  588. data/ext/cosmos/ext/array/extconf.rb +13 -0
  589. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -0
  590. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -0
  591. data/ext/cosmos/ext/config_parser/config_parser.c +237 -0
  592. data/ext/cosmos/ext/config_parser/extconf.rb +13 -0
  593. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -0
  594. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -0
  595. data/ext/cosmos/ext/crc/crc.c +341 -0
  596. data/ext/cosmos/ext/crc/extconf.rb +13 -0
  597. data/ext/cosmos/ext/line_graph/extconf.rb +13 -0
  598. data/ext/cosmos/ext/line_graph/line_graph.c +501 -0
  599. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +13 -0
  600. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -0
  601. data/ext/cosmos/ext/packet/extconf.rb +13 -0
  602. data/ext/cosmos/ext/packet/packet.c +350 -0
  603. data/ext/cosmos/ext/platform/extconf.rb +13 -0
  604. data/ext/cosmos/ext/platform/platform.c +101 -0
  605. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -0
  606. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -0
  607. data/ext/cosmos/ext/string/extconf.rb +13 -0
  608. data/ext/cosmos/ext/string/string.c +49 -0
  609. data/ext/cosmos/ext/structure/structure.c +1433 -0
  610. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -0
  611. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -0
  612. data/ext/cosmos/ext/telemetry/extconf.rb +13 -0
  613. data/ext/cosmos/ext/telemetry/telemetry.c +307 -0
  614. data/ext/mkrf_conf.rb +40 -0
  615. data/install/Gemfile +10 -0
  616. data/install/Launcher +16 -0
  617. data/install/Launcher.bat +9 -0
  618. data/install/Rakefile +77 -0
  619. data/install/config/data/README.txt +1 -0
  620. data/install/config/data/crc.txt +160 -0
  621. data/install/config/system/system.txt +39 -0
  622. data/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +9 -0
  623. data/install/config/targets/SYSTEM/target.txt +12 -0
  624. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -0
  625. data/install/config/tools/data_viewer/data_viewer.txt +4 -0
  626. data/install/config/tools/handbook_creator/default_toc.xsl +59 -0
  627. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -0
  628. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  629. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  630. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  631. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -0
  632. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  633. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  634. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  635. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  636. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  637. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  638. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  639. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  640. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -0
  641. data/install/config/tools/launcher/launcher.txt +40 -0
  642. data/install/config/tools/limits_monitor/README.txt +1 -0
  643. data/install/config/tools/opengl_builder/README.txt +1 -0
  644. data/install/config/tools/script_runner/script_runner.txt +3 -0
  645. data/install/config/tools/table_manager/README.txt +1 -0
  646. data/install/config/tools/test_runner/test_runner.txt +8 -0
  647. data/install/config/tools/tlm_extractor/README.txt +1 -0
  648. data/install/config/tools/tlm_grapher/README.txt +1 -0
  649. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -0
  650. data/install/lib/user_version.rb +3 -0
  651. data/install/procedures/README.txt +1 -0
  652. data/install/tools/CmdExtractor +16 -0
  653. data/install/tools/CmdExtractor.bat +9 -0
  654. data/install/tools/CmdSender +16 -0
  655. data/install/tools/CmdSender.bat +9 -0
  656. data/install/tools/CmdSequence +16 -0
  657. data/install/tools/CmdSequence.bat +9 -0
  658. data/install/tools/CmdTlmServer +16 -0
  659. data/install/tools/CmdTlmServer.bat +9 -0
  660. data/install/tools/ConfigEditor +16 -0
  661. data/install/tools/ConfigEditor.bat +9 -0
  662. data/install/tools/DataViewer +16 -0
  663. data/install/tools/DataViewer.bat +9 -0
  664. data/install/tools/HandbookCreator +16 -0
  665. data/install/tools/HandbookCreator.bat +9 -0
  666. data/install/tools/Launcher +16 -0
  667. data/install/tools/Launcher.bat +9 -0
  668. data/install/tools/LimitsMonitor +16 -0
  669. data/install/tools/LimitsMonitor.bat +9 -0
  670. data/install/tools/OpenGLBuilder +16 -0
  671. data/install/tools/OpenGLBuilder.bat +9 -0
  672. data/install/tools/PacketViewer +16 -0
  673. data/install/tools/PacketViewer.bat +9 -0
  674. data/install/tools/Replay +16 -0
  675. data/install/tools/Replay.bat +9 -0
  676. data/install/tools/ScriptRunner +16 -0
  677. data/install/tools/ScriptRunner.bat +9 -0
  678. data/install/tools/TableManager +16 -0
  679. data/install/tools/TableManager.bat +9 -0
  680. data/install/tools/TestRunner +16 -0
  681. data/install/tools/TestRunner.bat +9 -0
  682. data/install/tools/TlmExtractor +16 -0
  683. data/install/tools/TlmExtractor.bat +9 -0
  684. data/install/tools/TlmGrapher +16 -0
  685. data/install/tools/TlmGrapher.bat +9 -0
  686. data/install/tools/TlmViewer +16 -0
  687. data/install/tools/TlmViewer.bat +9 -0
  688. data/install/tools/ToolLaunch.bat +72 -0
  689. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  690. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  691. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  692. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  693. data/install/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  694. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  695. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  696. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  697. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  698. data/install/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  699. data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  700. data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  701. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  702. data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  703. data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  704. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  705. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  706. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  707. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  708. data/install/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  709. data/install/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  710. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  711. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  712. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  713. data/install/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  714. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  715. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  716. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  717. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  718. data/install/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  719. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  720. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  721. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  722. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  723. data/install/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  724. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  725. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  726. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  727. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  728. data/install/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  729. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  730. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  731. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  732. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  733. data/install/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  734. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  735. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  736. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  737. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  738. data/install/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  739. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  740. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  741. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  742. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  743. data/install/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  744. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -0
  745. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  746. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  747. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  748. data/install/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  749. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  750. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  751. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  752. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  753. data/install/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  754. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  755. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  756. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  757. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  758. data/install/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  759. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  760. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  761. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  762. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  763. data/install/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  764. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  765. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  766. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  767. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  768. data/install/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  769. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  770. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  771. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  772. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  773. data/install/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  774. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  775. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  776. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  777. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  778. data/install/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  779. data/install/tools/tool_launch.rb +38 -0
  780. data/lib/cosmos.rb +63 -0
  781. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -0
  782. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -0
  783. data/lib/cosmos/config/config_parser.rb +508 -0
  784. data/lib/cosmos/config/meta_config_parser.rb +57 -0
  785. data/lib/cosmos/conversions.rb +13 -0
  786. data/lib/cosmos/conversions/conversion.rb +52 -0
  787. data/lib/cosmos/conversions/generic_conversion.rb +67 -0
  788. data/lib/cosmos/conversions/new_packet_log_conversion.rb +52 -0
  789. data/lib/cosmos/conversions/polynomial_conversion.rb +79 -0
  790. data/lib/cosmos/conversions/processor_conversion.rb +56 -0
  791. data/lib/cosmos/conversions/received_count_conversion.rb +33 -0
  792. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -0
  793. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -0
  794. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +139 -0
  795. data/lib/cosmos/conversions/unix_time_conversion.rb +57 -0
  796. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -0
  797. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -0
  798. data/lib/cosmos/core_ext.rb +18 -0
  799. data/lib/cosmos/core_ext/array.rb +397 -0
  800. data/lib/cosmos/core_ext/class.rb +53 -0
  801. data/lib/cosmos/core_ext/cosmos_io.rb +45 -0
  802. data/lib/cosmos/core_ext/exception.rb +52 -0
  803. data/lib/cosmos/core_ext/file.rb +76 -0
  804. data/lib/cosmos/core_ext/hash.rb +28 -0
  805. data/lib/cosmos/core_ext/io.rb +93 -0
  806. data/lib/cosmos/core_ext/kernel.rb +33 -0
  807. data/lib/cosmos/core_ext/math.rb +119 -0
  808. data/lib/cosmos/core_ext/matrix.rb +149 -0
  809. data/lib/cosmos/core_ext/objectspace.rb +27 -0
  810. data/lib/cosmos/core_ext/range.rb +18 -0
  811. data/lib/cosmos/core_ext/socket.rb +32 -0
  812. data/lib/cosmos/core_ext/string.rb +351 -0
  813. data/lib/cosmos/core_ext/stringio.rb +24 -0
  814. data/lib/cosmos/core_ext/time.rb +481 -0
  815. data/lib/cosmos/ext/.keep +0 -0
  816. data/lib/cosmos/gui/choosers/combobox_chooser.rb +141 -0
  817. data/lib/cosmos/gui/choosers/file_chooser.rb +85 -0
  818. data/lib/cosmos/gui/choosers/float_chooser.rb +67 -0
  819. data/lib/cosmos/gui/choosers/integer_chooser.rb +69 -0
  820. data/lib/cosmos/gui/choosers/string_chooser.rb +35 -0
  821. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -0
  822. data/lib/cosmos/gui/choosers/value_chooser.rb +67 -0
  823. data/lib/cosmos/gui/dialogs/about_dialog.rb +166 -0
  824. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +140 -0
  825. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +51 -0
  826. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +163 -0
  827. data/lib/cosmos/gui/dialogs/details_dialog.rb +190 -0
  828. data/lib/cosmos/gui/dialogs/exception_dialog.rb +106 -0
  829. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +60 -0
  830. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +272 -0
  831. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
  832. data/lib/cosmos/gui/dialogs/legal_dialog.rb +183 -0
  833. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +97 -0
  834. data/lib/cosmos/gui/dialogs/progress_dialog.rb +313 -0
  835. data/lib/cosmos/gui/dialogs/pry_dialog.rb +169 -0
  836. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +51 -0
  837. data/lib/cosmos/gui/dialogs/select_dialog.rb +59 -0
  838. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +159 -0
  839. data/lib/cosmos/gui/dialogs/splash.rb +145 -0
  840. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +201 -0
  841. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +79 -0
  842. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +108 -0
  843. data/lib/cosmos/gui/line_graph/line_graph.rb +482 -0
  844. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +36 -0
  845. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +521 -0
  846. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +112 -0
  847. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +452 -0
  848. data/lib/cosmos/gui/line_graph/line_graph_script.rb +81 -0
  849. data/lib/cosmos/gui/line_graph/lines.rb +304 -0
  850. data/lib/cosmos/gui/line_graph/overview_graph.rb +474 -0
  851. data/lib/cosmos/gui/opengl/earth_model.rb +25 -0
  852. data/lib/cosmos/gui/opengl/gl_bounds.rb +55 -0
  853. data/lib/cosmos/gui/opengl/gl_light.rb +38 -0
  854. data/lib/cosmos/gui/opengl/gl_material.rb +28 -0
  855. data/lib/cosmos/gui/opengl/gl_scene.rb +78 -0
  856. data/lib/cosmos/gui/opengl/gl_shape.rb +150 -0
  857. data/lib/cosmos/gui/opengl/gl_viewer.rb +712 -0
  858. data/lib/cosmos/gui/opengl/gl_viewport.rb +34 -0
  859. data/lib/cosmos/gui/opengl/moon_model.rb +25 -0
  860. data/lib/cosmos/gui/opengl/opengl.rb +8 -0
  861. data/lib/cosmos/gui/opengl/stl_reader.rb +210 -0
  862. data/lib/cosmos/gui/opengl/stl_shape.rb +127 -0
  863. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -0
  864. data/lib/cosmos/gui/qt.rb +841 -0
  865. data/lib/cosmos/gui/qt_tool.rb +489 -0
  866. data/lib/cosmos/gui/text/completion.rb +402 -0
  867. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -0
  868. data/lib/cosmos/gui/text/completion_text_edit.rb +194 -0
  869. data/lib/cosmos/gui/text/ruby_editor.rb +463 -0
  870. data/lib/cosmos/gui/utilities/analyze_log.rb +153 -0
  871. data/lib/cosmos/gui/utilities/screenshot.rb +33 -0
  872. data/lib/cosmos/gui/utilities/script_module_gui.rb +364 -0
  873. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +171 -0
  874. data/lib/cosmos/gui/widgets/packet_log_frame.rb +344 -0
  875. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -0
  876. data/lib/cosmos/interfaces.rb +21 -0
  877. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +134 -0
  878. data/lib/cosmos/interfaces/interface.rb +449 -0
  879. data/lib/cosmos/interfaces/linc_interface.rb +459 -0
  880. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
  881. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
  882. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +114 -0
  883. data/lib/cosmos/interfaces/protocols/length_protocol.rb +147 -0
  884. data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
  885. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
  886. data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
  887. data/lib/cosmos/interfaces/protocols/template_protocol.rb +240 -0
  888. data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
  889. data/lib/cosmos/interfaces/serial_interface.rb +81 -0
  890. data/lib/cosmos/interfaces/simulated_target_interface.rb +140 -0
  891. data/lib/cosmos/interfaces/stream_interface.rb +64 -0
  892. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -0
  893. data/lib/cosmos/interfaces/tcpip_server_interface.rb +625 -0
  894. data/lib/cosmos/interfaces/udp_interface.rb +141 -0
  895. data/lib/cosmos/io/buffered_file.rb +101 -0
  896. data/lib/cosmos/io/cosmos_snmp.rb +50 -0
  897. data/lib/cosmos/io/io_multiplexer.rb +71 -0
  898. data/lib/cosmos/io/json_drb.rb +386 -0
  899. data/lib/cosmos/io/json_drb_object.rb +201 -0
  900. data/lib/cosmos/io/json_rpc.rb +365 -0
  901. data/lib/cosmos/io/posix_serial_driver.rb +147 -0
  902. data/lib/cosmos/io/raw_logger.rb +170 -0
  903. data/lib/cosmos/io/raw_logger_pair.rb +71 -0
  904. data/lib/cosmos/io/serial_driver.rb +94 -0
  905. data/lib/cosmos/io/stderr.rb +36 -0
  906. data/lib/cosmos/io/stdout.rb +36 -0
  907. data/lib/cosmos/io/udp_sockets.rb +152 -0
  908. data/lib/cosmos/io/win32_serial_driver.rb +165 -0
  909. data/lib/cosmos/packet_logs.rb +6 -0
  910. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -0
  911. data/lib/cosmos/packet_logs/packet_log_reader.rb +461 -0
  912. data/lib/cosmos/packet_logs/packet_log_writer.rb +341 -0
  913. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -0
  914. data/lib/cosmos/packets/binary_accessor.rb +1201 -0
  915. data/lib/cosmos/packets/commands.rb +318 -0
  916. data/lib/cosmos/packets/limits.rb +264 -0
  917. data/lib/cosmos/packets/limits_response.rb +42 -0
  918. data/lib/cosmos/packets/packet.rb +994 -0
  919. data/lib/cosmos/packets/packet_config.rb +1393 -0
  920. data/lib/cosmos/packets/packet_item.rb +585 -0
  921. data/lib/cosmos/packets/packet_item_limits.rb +140 -0
  922. data/lib/cosmos/packets/parsers/format_string_parser.rb +59 -0
  923. data/lib/cosmos/packets/parsers/limits_parser.rb +147 -0
  924. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -0
  925. data/lib/cosmos/packets/parsers/macro_parser.rb +118 -0
  926. data/lib/cosmos/packets/parsers/packet_item_parser.rb +234 -0
  927. data/lib/cosmos/packets/parsers/packet_parser.rb +131 -0
  928. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -0
  929. data/lib/cosmos/packets/parsers/state_parser.rb +119 -0
  930. data/lib/cosmos/packets/structure.rb +508 -0
  931. data/lib/cosmos/packets/structure_item.rb +292 -0
  932. data/lib/cosmos/packets/telemetry.rb +444 -0
  933. data/lib/cosmos/processors.rb +6 -0
  934. data/lib/cosmos/processors/new_packet_log_processor.rb +39 -0
  935. data/lib/cosmos/processors/processor.rb +76 -0
  936. data/lib/cosmos/processors/statistics_processor.rb +70 -0
  937. data/lib/cosmos/processors/watermark_processor.rb +49 -0
  938. data/lib/cosmos/script.rb +9 -0
  939. data/lib/cosmos/script/api_shared.rb +972 -0
  940. data/lib/cosmos/script/cmd_tlm_server.rb +138 -0
  941. data/lib/cosmos/script/commands.rb +189 -0
  942. data/lib/cosmos/script/extract.rb +139 -0
  943. data/lib/cosmos/script/limits.rb +116 -0
  944. data/lib/cosmos/script/script.rb +76 -0
  945. data/lib/cosmos/script/scripting.rb +144 -0
  946. data/lib/cosmos/script/telemetry.rb +216 -0
  947. data/lib/cosmos/script/tools.rb +97 -0
  948. data/lib/cosmos/streams/serial_stream.rb +150 -0
  949. data/lib/cosmos/streams/stream.rb +54 -0
  950. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -0
  951. data/lib/cosmos/streams/tcpip_socket_stream.rb +186 -0
  952. data/lib/cosmos/system.rb +4 -0
  953. data/lib/cosmos/system/system.rb +778 -0
  954. data/lib/cosmos/system/target.rb +228 -0
  955. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +268 -0
  956. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +78 -0
  957. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +773 -0
  958. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -0
  959. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
  960. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
  961. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
  962. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1337 -0
  963. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +54 -0
  964. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +77 -0
  965. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +537 -0
  966. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +274 -0
  967. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +480 -0
  968. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +121 -0
  969. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -0
  970. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +213 -0
  971. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -0
  972. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +151 -0
  973. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +255 -0
  974. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +85 -0
  975. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +274 -0
  976. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +153 -0
  977. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +122 -0
  978. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +161 -0
  979. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -0
  980. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +134 -0
  981. data/lib/cosmos/tools/config_editor/config_editor.rb +728 -0
  982. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +690 -0
  983. data/lib/cosmos/tools/data_viewer/data_viewer.rb +633 -0
  984. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +120 -0
  985. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -0
  986. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -0
  987. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -0
  988. data/lib/cosmos/tools/launcher/launcher.rb +194 -0
  989. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -0
  990. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -0
  991. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -0
  992. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +972 -0
  993. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -0
  994. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -0
  995. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +608 -0
  996. data/lib/cosmos/tools/replay/replay.rb +517 -0
  997. data/lib/cosmos/tools/replay/replay_server.rb +91 -0
  998. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -0
  999. data/lib/cosmos/tools/script_runner/script_runner.rb +979 -0
  1000. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -0
  1001. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1838 -0
  1002. data/lib/cosmos/tools/table_manager/table.rb +61 -0
  1003. data/lib/cosmos/tools/table_manager/table_config.rb +189 -0
  1004. data/lib/cosmos/tools/table_manager/table_item.rb +58 -0
  1005. data/lib/cosmos/tools/table_manager/table_item_parser.rb +46 -0
  1006. data/lib/cosmos/tools/table_manager/table_manager.rb +1152 -0
  1007. data/lib/cosmos/tools/table_manager/table_manager_core.rb +321 -0
  1008. data/lib/cosmos/tools/table_manager/table_parser.rb +75 -0
  1009. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -0
  1010. data/lib/cosmos/tools/test_runner/test.rb +539 -0
  1011. data/lib/cosmos/tools/test_runner/test_runner.rb +1271 -0
  1012. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -0
  1013. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -0
  1014. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1152 -0
  1015. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +441 -0
  1016. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -0
  1017. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +92 -0
  1018. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -0
  1019. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -0
  1020. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -0
  1021. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +222 -0
  1022. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -0
  1023. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -0
  1024. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -0
  1025. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -0
  1026. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +422 -0
  1027. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -0
  1028. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -0
  1029. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +325 -0
  1030. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +191 -0
  1031. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -0
  1032. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -0
  1033. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -0
  1034. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +173 -0
  1035. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -0
  1036. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -0
  1037. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +209 -0
  1038. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -0
  1039. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -0
  1040. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -0
  1041. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -0
  1042. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +451 -0
  1043. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -0
  1044. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -0
  1045. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -0
  1046. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -0
  1047. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -0
  1048. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -0
  1049. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +103 -0
  1050. data/lib/cosmos/tools/tlm_viewer/screen.rb +502 -0
  1051. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +571 -0
  1052. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +293 -0
  1053. data/lib/cosmos/tools/tlm_viewer/widgets.rb +61 -0
  1054. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -0
  1055. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -0
  1056. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -0
  1057. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -0
  1058. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +33 -0
  1059. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +70 -0
  1060. data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +77 -0
  1061. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +43 -0
  1062. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +59 -0
  1063. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +44 -0
  1064. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +54 -0
  1065. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +53 -0
  1066. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +63 -0
  1067. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +123 -0
  1068. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +38 -0
  1069. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -0
  1070. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +31 -0
  1071. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -0
  1072. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -0
  1073. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -0
  1074. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -0
  1075. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -0
  1076. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -0
  1077. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -0
  1078. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -0
  1079. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +57 -0
  1080. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -0
  1081. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -0
  1082. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +38 -0
  1083. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -0
  1084. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +39 -0
  1085. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -0
  1086. data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +113 -0
  1087. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +116 -0
  1088. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +102 -0
  1089. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +116 -0
  1090. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +63 -0
  1091. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +58 -0
  1092. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -0
  1093. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -0
  1094. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +38 -0
  1095. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +65 -0
  1096. data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +65 -0
  1097. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -0
  1098. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -0
  1099. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -0
  1100. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
  1101. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -0
  1102. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -0
  1103. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -0
  1104. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -0
  1105. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +91 -0
  1106. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -0
  1107. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -0
  1108. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -0
  1109. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -0
  1110. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -0
  1111. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +37 -0
  1112. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -0
  1113. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +37 -0
  1114. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +36 -0
  1115. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +38 -0
  1116. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -0
  1117. data/lib/cosmos/top_level.rb +790 -0
  1118. data/lib/cosmos/utilities.rb +11 -0
  1119. data/lib/cosmos/utilities/crc.rb +268 -0
  1120. data/lib/cosmos/utilities/csv.rb +137 -0
  1121. data/lib/cosmos/utilities/logger.rb +137 -0
  1122. data/lib/cosmos/utilities/low_fragmentation_array.rb +19 -0
  1123. data/lib/cosmos/utilities/message_log.rb +79 -0
  1124. data/lib/cosmos/utilities/quaternion.rb +258 -0
  1125. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -0
  1126. data/lib/cosmos/utilities/simulated_target.rb +100 -0
  1127. data/lib/cosmos/utilities/sleeper.rb +44 -0
  1128. data/lib/cosmos/version.rb +12 -0
  1129. data/lib/cosmos/win32/excel.rb +66 -0
  1130. data/lib/cosmos/win32/win32.rb +387 -0
  1131. data/lib/cosmos/win32/win32_main.rb +325 -0
  1132. data/roodi.yml +24 -0
  1133. data/run_gui_tests.bat +44 -0
  1134. data/spec/ccsds/ccsds_packet_spec.rb +67 -0
  1135. data/spec/ccsds/ccsds_parser_spec.rb +148 -0
  1136. data/spec/config/config_parser_spec.rb +353 -0
  1137. data/spec/conversions/conversion_spec.rb +31 -0
  1138. data/spec/conversions/generic_conversion_spec.rb +45 -0
  1139. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -0
  1140. data/spec/conversions/polynomial_conversion_spec.rb +40 -0
  1141. data/spec/conversions/processor_conversion_spec.rb +45 -0
  1142. data/spec/conversions/received_count_conversion_spec.rb +43 -0
  1143. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -0
  1144. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -0
  1145. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -0
  1146. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -0
  1147. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -0
  1148. data/spec/core_ext/array_spec.rb +247 -0
  1149. data/spec/core_ext/class_spec.rb +36 -0
  1150. data/spec/core_ext/cosmos_io_spec.rb +77 -0
  1151. data/spec/core_ext/exception_spec.rb +91 -0
  1152. data/spec/core_ext/file_spec.rb +72 -0
  1153. data/spec/core_ext/hash_spec.rb +24 -0
  1154. data/spec/core_ext/io_spec.rb +46 -0
  1155. data/spec/core_ext/kernel_spec.rb +54 -0
  1156. data/spec/core_ext/math_spec.rb +116 -0
  1157. data/spec/core_ext/matrix_spec.rb +127 -0
  1158. data/spec/core_ext/objectspace_spec.rb +32 -0
  1159. data/spec/core_ext/range_spec.rb +21 -0
  1160. data/spec/core_ext/socket_spec.rb +32 -0
  1161. data/spec/core_ext/string_spec.rb +239 -0
  1162. data/spec/core_ext/stringio_spec.rb +21 -0
  1163. data/spec/core_ext/time_spec.rb +220 -0
  1164. data/spec/gui/line_graph/line_clip_spec.rb +324 -0
  1165. data/spec/gui/qt_spec.rb +104 -0
  1166. data/spec/install/config/system/system.txt +27 -0
  1167. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -0
  1168. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -0
  1169. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -0
  1170. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -0
  1171. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -0
  1172. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -0
  1173. data/spec/install/config/targets/INST/target.txt +10 -0
  1174. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  1175. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  1176. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  1177. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  1178. data/spec/install/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  1179. data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
  1180. data/spec/install/config/targets/SYSTEM/target.txt +12 -0
  1181. data/spec/install/lib/README.txt +1 -0
  1182. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +146 -0
  1183. data/spec/interfaces/interface_spec.rb +514 -0
  1184. data/spec/interfaces/linc_interface_spec.rb +248 -0
  1185. data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
  1186. data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
  1187. data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
  1188. data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
  1189. data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
  1190. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
  1191. data/spec/interfaces/protocols/template_protocol_spec.rb +322 -0
  1192. data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
  1193. data/spec/interfaces/serial_interface_spec.rb +57 -0
  1194. data/spec/interfaces/simulated_target_interface_spec.rb +128 -0
  1195. data/spec/interfaces/tcpip_client_interface_spec.rb +60 -0
  1196. data/spec/interfaces/tcpip_server_interface_spec.rb +157 -0
  1197. data/spec/interfaces/udp_interface_spec.rb +246 -0
  1198. data/spec/io/buffered_file_spec.rb +113 -0
  1199. data/spec/io/io_multiplexer_spec.rb +102 -0
  1200. data/spec/io/json_drb_object_spec.rb +119 -0
  1201. data/spec/io/json_drb_spec.rb +297 -0
  1202. data/spec/io/json_rpc_spec.rb +264 -0
  1203. data/spec/io/raw_logger_pair_spec.rb +76 -0
  1204. data/spec/io/raw_logger_spec.rb +137 -0
  1205. data/spec/io/serial_driver_spec.rb +62 -0
  1206. data/spec/io/stderr_spec.rb +32 -0
  1207. data/spec/io/stdout_spec.rb +32 -0
  1208. data/spec/io/udp_sockets_spec.rb +99 -0
  1209. data/spec/io/win32_serial_driver_spec.rb +91 -0
  1210. data/spec/packet_logs/packet_log_reader_spec.rb +553 -0
  1211. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -0
  1212. data/spec/packet_logs/packet_log_writer_spec.rb +227 -0
  1213. data/spec/packets/binary_accessor_spec.rb +2326 -0
  1214. data/spec/packets/commands_spec.rb +379 -0
  1215. data/spec/packets/limits_response_spec.rb +25 -0
  1216. data/spec/packets/limits_spec.rb +344 -0
  1217. data/spec/packets/packet_config_spec.rb +960 -0
  1218. data/spec/packets/packet_item_limits_spec.rb +188 -0
  1219. data/spec/packets/packet_item_spec.rb +386 -0
  1220. data/spec/packets/packet_spec.rb +1456 -0
  1221. data/spec/packets/parsers/format_string_parser_spec.rb +133 -0
  1222. data/spec/packets/parsers/limits_parser_spec.rb +293 -0
  1223. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -0
  1224. data/spec/packets/parsers/macro_parser_spec.rb +220 -0
  1225. data/spec/packets/parsers/packet_item_parser_spec.rb +366 -0
  1226. data/spec/packets/parsers/packet_parser_spec.rb +99 -0
  1227. data/spec/packets/parsers/processor_parser_spec.rb +114 -0
  1228. data/spec/packets/parsers/state_parser_spec.rb +189 -0
  1229. data/spec/packets/structure_item_spec.rb +213 -0
  1230. data/spec/packets/structure_spec.rb +565 -0
  1231. data/spec/packets/telemetry_spec.rb +578 -0
  1232. data/spec/processors/new_packet_log_processor_spec.rb +39 -0
  1233. data/spec/processors/processor_spec.rb +55 -0
  1234. data/spec/processors/statistics_processor_spec.rb +60 -0
  1235. data/spec/processors/watermark_processor_spec.rb +51 -0
  1236. data/spec/script/cmd_tlm_server_spec.rb +176 -0
  1237. data/spec/script/commands_disconnect_spec.rb +270 -0
  1238. data/spec/script/commands_spec.rb +303 -0
  1239. data/spec/script/extract_spec.rb +158 -0
  1240. data/spec/script/limits_spec.rb +153 -0
  1241. data/spec/script/script_spec.rb +90 -0
  1242. data/spec/script/scripting_spec.rb +745 -0
  1243. data/spec/script/telemetry_spec.rb +176 -0
  1244. data/spec/script/tools_spec.rb +134 -0
  1245. data/spec/spec_helper.rb +225 -0
  1246. data/spec/streams/serial_stream_spec.rb +122 -0
  1247. data/spec/streams/stream_spec.rb +30 -0
  1248. data/spec/streams/tcpip_client_stream_spec.rb +65 -0
  1249. data/spec/streams/tcpip_socket_stream_spec.rb +226 -0
  1250. data/spec/system/system_spec.rb +891 -0
  1251. data/spec/system/target_spec.rb +304 -0
  1252. data/spec/tools/cmd_tlm_server/api_spec.rb +1123 -0
  1253. data/spec/tools/cmd_tlm_server/background_task_spec.rb +44 -0
  1254. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +227 -0
  1255. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +610 -0
  1256. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +431 -0
  1257. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -0
  1258. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -0
  1259. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +401 -0
  1260. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -0
  1261. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
  1262. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -0
  1263. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +191 -0
  1264. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -0
  1265. data/spec/tools/launcher/launcher_config_spec.rb +474 -0
  1266. data/spec/tools/table_manager/table_config_spec.rb +226 -0
  1267. data/spec/tools/table_manager/table_item_parser_spec.rb +61 -0
  1268. data/spec/tools/table_manager/table_item_spec.rb +57 -0
  1269. data/spec/tools/table_manager/table_parser_spec.rb +96 -0
  1270. data/spec/tools/table_manager/table_spec.rb +90 -0
  1271. data/spec/tools/table_manager/tablemanager_core_spec.rb +556 -0
  1272. data/spec/top_level/top_level_spec.rb +373 -0
  1273. data/spec/utilities/crc_spec.rb +45 -0
  1274. data/spec/utilities/csv_spec.rb +139 -0
  1275. data/spec/utilities/logger_spec.rb +102 -0
  1276. data/spec/utilities/message_log_spec.rb +89 -0
  1277. data/spec/utilities/quaternion_spec.rb +107 -0
  1278. data/spec/utilities/ruby_lex_utils_spec.rb +86 -0
  1279. data/tasks/gemfile_stats.rake +79 -0
  1280. data/tasks/manifest.rake +22 -0
  1281. data/tasks/spec.rake +23 -0
  1282. data/test/benchmarks/binary_accessor_benchmark.rb +14 -0
  1283. data/test/benchmarks/gsub_benchmark.rb +152 -0
  1284. data/test/benchmarks/is_a_benchmark.rb +34 -0
  1285. data/test/performance/PACKETS.bat +1 -0
  1286. data/test/performance/Rakefile +77 -0
  1287. data/test/performance/THREADS.bat +1 -0
  1288. data/test/performance/config/data/attitude.bin +0 -0
  1289. data/test/performance/config/data/crc.txt +196 -0
  1290. data/test/performance/config/data/diamond.STL +58 -0
  1291. data/test/performance/config/data/groundoff.gif +0 -0
  1292. data/test/performance/config/data/groundon.gif +0 -0
  1293. data/test/performance/config/data/hselectoff.gif +0 -0
  1294. data/test/performance/config/data/hselecton.gif +0 -0
  1295. data/test/performance/config/data/hswitchoff.gif +0 -0
  1296. data/test/performance/config/data/hswitchon.gif +0 -0
  1297. data/test/performance/config/data/meta_init.txt +4 -0
  1298. data/test/performance/config/data/position.bin +0 -0
  1299. data/test/performance/config/data/poweroff.gif +0 -0
  1300. data/test/performance/config/data/poweron.gif +0 -0
  1301. data/test/performance/config/data/satellite.gif +0 -0
  1302. data/test/performance/config/data/tada.wav +0 -0
  1303. data/test/performance/config/data/vswitchoff.gif +0 -0
  1304. data/test/performance/config/data/vswitchon.gif +0 -0
  1305. data/test/performance/config/system/system_packets.txt +38 -0
  1306. data/test/performance/config/system/system_threads.txt +58 -0
  1307. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -0
  1308. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  1309. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  1310. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -0
  1311. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -0
  1312. data/test/performance/config/targets/COSMOS/target.txt +11 -0
  1313. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -0
  1314. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -0
  1315. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -0
  1316. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -0
  1317. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -0
  1318. data/test/performance/config/targets/PACKET/screens/status.txt +25 -0
  1319. data/test/performance/config/targets/PACKET/target.txt +28 -0
  1320. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -0
  1321. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -0
  1322. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -0
  1323. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -0
  1324. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -0
  1325. data/test/performance/config/targets/THREAD/screens/status.txt +25 -0
  1326. data/test/performance/config/targets/THREAD/target.txt +7 -0
  1327. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -0
  1328. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -0
  1329. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -0
  1330. data/test/performance/config/tools/handbook_creator/default_toc.xsl +59 -0
  1331. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -0
  1332. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  1333. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  1334. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  1335. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -0
  1336. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  1337. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  1338. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  1339. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  1340. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  1341. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  1342. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  1343. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  1344. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -0
  1345. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -0
  1346. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -0
  1347. data/test/performance/config/tools/limits_monitor/README.txt +1 -0
  1348. data/test/performance/config/tools/opengl_builder/README.txt +1 -0
  1349. data/test/performance/config/tools/script_runner/script_runner.txt +3 -0
  1350. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -0
  1351. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  1352. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
  1353. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
  1354. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
  1355. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
  1356. data/test/performance/config/tools/test_runner/test_runner.txt +17 -0
  1357. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  1358. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  1359. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  1360. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  1361. data/test/performance/config/tools/tlm_grapher/README.txt +1 -0
  1362. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -0
  1363. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -0
  1364. data/test/performance/lib/packet_target.rb +126 -0
  1365. data/test/performance/lib/thread_target.rb +120 -0
  1366. data/test/performance/lib/user_version.rb +3 -0
  1367. data/test/performance/outputs/handbooks/README.txt +1 -0
  1368. data/test/performance/outputs/logs/README.txt +1 -0
  1369. data/test/performance/outputs/saved_config/README.txt +1 -0
  1370. data/test/performance/outputs/tables/README.txt +1 -0
  1371. data/test/performance/outputs/tmp/README.txt +1 -0
  1372. data/test/performance/procedures/checks.rb +11 -0
  1373. data/test/performance/procedures/clear_util.rb +7 -0
  1374. data/test/performance/procedures/collect.rb +18 -0
  1375. data/test/performance/procedures/collect_util.rb +14 -0
  1376. data/test/performance/procedures/cosmos_api_test.rb +293 -0
  1377. data/test/performance/procedures/disconnect.rb +29 -0
  1378. data/test/performance/procedures/example_test.rb +182 -0
  1379. data/test/performance/procedures/plot_test.rb +8 -0
  1380. data/test/performance/procedures/procedure.rb +3 -0
  1381. data/test/performance/procedures/run_example_test.rb +3 -0
  1382. data/test/performance/procedures/test.rb +51 -0
  1383. data/test/performance/tools/CmdExtractor +14 -0
  1384. data/test/performance/tools/CmdExtractor.bat +59 -0
  1385. data/test/performance/tools/CmdSender +14 -0
  1386. data/test/performance/tools/CmdSender.bat +59 -0
  1387. data/test/performance/tools/CmdTlmServer +16 -0
  1388. data/test/performance/tools/CmdTlmServer.bat +59 -0
  1389. data/test/performance/tools/CmdTlmServerMemProf +20 -0
  1390. data/test/performance/tools/CmdTlmServerMemProf.bat +59 -0
  1391. data/test/performance/tools/DataViewer +14 -0
  1392. data/test/performance/tools/DataViewer.bat +59 -0
  1393. data/test/performance/tools/HandbookCreator +14 -0
  1394. data/test/performance/tools/HandbookCreator.bat +61 -0
  1395. data/test/performance/tools/Launcher +14 -0
  1396. data/test/performance/tools/Launcher.bat +59 -0
  1397. data/test/performance/tools/LimitsMonitor +14 -0
  1398. data/test/performance/tools/LimitsMonitor.bat +59 -0
  1399. data/test/performance/tools/OpenGLBuilder +14 -0
  1400. data/test/performance/tools/OpenGLBuilder.bat +59 -0
  1401. data/test/performance/tools/PacketTarget +14 -0
  1402. data/test/performance/tools/PacketTarget.bat +59 -0
  1403. data/test/performance/tools/PacketViewer +14 -0
  1404. data/test/performance/tools/PacketViewer.bat +59 -0
  1405. data/test/performance/tools/Replay +14 -0
  1406. data/test/performance/tools/Replay.bat +59 -0
  1407. data/test/performance/tools/ScpiTarget +14 -0
  1408. data/test/performance/tools/ScpiTarget.bat +59 -0
  1409. data/test/performance/tools/ScriptRunner +14 -0
  1410. data/test/performance/tools/ScriptRunner.bat +59 -0
  1411. data/test/performance/tools/TableManager +14 -0
  1412. data/test/performance/tools/TableManager.bat +59 -0
  1413. data/test/performance/tools/TestRunner +14 -0
  1414. data/test/performance/tools/TestRunner.bat +59 -0
  1415. data/test/performance/tools/ThreadTarget +14 -0
  1416. data/test/performance/tools/ThreadTarget.bat +59 -0
  1417. data/test/performance/tools/TlmExtractor +14 -0
  1418. data/test/performance/tools/TlmExtractor.bat +59 -0
  1419. data/test/performance/tools/TlmGrapher +14 -0
  1420. data/test/performance/tools/TlmGrapher.bat +59 -0
  1421. data/test/performance/tools/TlmGrapherMemProf +19 -0
  1422. data/test/performance/tools/TlmGrapherMemProf.bat +59 -0
  1423. data/test/performance/tools/TlmViewer +14 -0
  1424. data/test/performance/tools/TlmViewer.bat +59 -0
  1425. data/test/performance/tools/TlmViewerMemProf +19 -0
  1426. data/test/performance/tools/TlmViewerMemProf.bat +59 -0
  1427. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  1428. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
  1429. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
  1430. data/test/performance/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1431. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  1432. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
  1433. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
  1434. data/test/performance/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  1435. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  1436. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
  1437. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
  1438. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  1439. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  1440. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
  1441. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
  1442. data/test/performance/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  1443. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  1444. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
  1445. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
  1446. data/test/performance/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  1447. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  1448. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
  1449. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
  1450. data/test/performance/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  1451. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  1452. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
  1453. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
  1454. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  1455. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  1456. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
  1457. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
  1458. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  1459. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  1460. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
  1461. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
  1462. data/test/performance/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  1463. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -0
  1464. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
  1465. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
  1466. data/test/performance/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  1467. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  1468. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
  1469. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
  1470. data/test/performance/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  1471. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  1472. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
  1473. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
  1474. data/test/performance/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  1475. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  1476. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
  1477. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
  1478. data/test/performance/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  1479. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  1480. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
  1481. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
  1482. data/test/performance/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1483. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  1484. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
  1485. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
  1486. data/test/performance/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  1487. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  1488. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
  1489. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
  1490. data/test/performance/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  1491. metadata +1964 -0
@@ -0,0 +1,40 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+
13
+ module Cosmos
14
+
15
+ # This class reads the Script Runner configuration file
16
+ class ScriptRunnerConfig
17
+ # Processes the config file
18
+ def initialize(filename)
19
+ parser = ConfigParser.new("http://cosmosrb.com/docs/tools/#script-runner-configuration")
20
+ parser.parse_file(filename) do |keyword, params|
21
+ case keyword
22
+ when 'LINE_DELAY'
23
+ parser.verify_num_parameters(1, 1, "#{keyword} <Delay in Seconds>")
24
+ ScriptRunnerFrame.line_delay = params[0].to_f
25
+ when 'MONITOR_LIMITS'
26
+ parser.verify_num_parameters(0, 0, keyword)
27
+ ScriptRunnerFrame.monitor_limits = true
28
+ when 'PAUSE_ON_RED'
29
+ parser.verify_num_parameters(0, 0, keyword)
30
+ ScriptRunnerFrame.monitor_limits = true
31
+ ScriptRunnerFrame.pause_on_red = true
32
+ else
33
+ # blank config.lines will have a nil keyword and should not raise an exception
34
+ raise parser.error("Unknown keyword '#{keyword}'") if keyword
35
+ end
36
+ end
37
+ end
38
+ end # class ScriptRunnerConfig
39
+
40
+ end # module Cosmos
@@ -0,0 +1,1838 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+ require 'cosmos/script'
13
+ require 'cosmos/gui/utilities/script_module_gui'
14
+ require 'cosmos/gui/dialogs/splash'
15
+ require 'cosmos/gui/dialogs/exception_dialog'
16
+ require 'cosmos/gui/text/completion'
17
+ require 'cosmos/gui/text/completion_line_edit'
18
+ require 'cosmos/gui/text/ruby_editor'
19
+ require 'cosmos/gui/dialogs/progress_dialog'
20
+ require 'cosmos/gui/widgets/realtime_button_bar'
21
+ require 'cosmos/gui/dialogs/find_replace_dialog'
22
+ require 'cosmos/gui/choosers/file_chooser'
23
+ require 'cosmos/io/stdout'
24
+ require 'cosmos/io/stderr'
25
+
26
+ module Cosmos
27
+
28
+ Cosmos.disable_warnings do
29
+ module Script
30
+ def prompt_for_script_abort
31
+ ScriptRunnerFrame.instance.perform_pause
32
+ return false # Not aborted - Retry
33
+ end
34
+ end
35
+ end
36
+
37
+ class ScriptRunnerDialog < Qt::Dialog
38
+ attr_reader :script_runner_frame
39
+
40
+ def initialize(parent,
41
+ title,
42
+ default_tab_text = 'Untitled')
43
+ super(parent)
44
+ setWindowTitle(title)
45
+ setMinimumWidth(parent.width * 0.8)
46
+ setMinimumHeight(parent.height * 0.6)
47
+
48
+ # Create script runner frame
49
+ @script_runner_frame = ScriptRunnerFrame.new(self, default_tab_text)
50
+ layout = Qt::VBoxLayout.new
51
+ layout.addWidget(@script_runner_frame)
52
+ setLayout(layout)
53
+ end
54
+
55
+ # Executes the given text and closes when complete
56
+ def execute_text_and_close_on_complete(text, text_binding = nil)
57
+ @script_runner_frame.set_text(text)
58
+ @script_runner_frame.run_and_close_on_complete(text_binding)
59
+ exec
60
+ dispose
61
+ end
62
+
63
+ def reject
64
+ # Don't allow the dialog to close if we're running
65
+ return if @script_runner_frame.running?
66
+ super
67
+ end
68
+ end # class ScriptRunnerDialog
69
+
70
+ class ScriptRunnerFrame < Qt::Widget
71
+ slots 'context_menu(const QPoint&)'
72
+ slots 'undo_available(bool)'
73
+ slots 'breakpoint_set(int)'
74
+ slots 'breakpoint_cleared(int)'
75
+ slots 'breakpoints_cleared()'
76
+ signals 'undoAvailable(bool)'
77
+ signals 'modificationChanged(bool)'
78
+
79
+ CMD_KEYWORDS = %w(cmd cmd_no_range_check cmd_no_hazardous_check cmd_no_checks)
80
+ TLM_KEYWORDS = %w(tlm tlm_raw tlm_formatted tlm_with_units limits_enabled? \
81
+ enable_limits disable_limits wait_tolerance wait_tolerance_raw \
82
+ check_tolerance check_tolerance_raw wait_check_tolerance \
83
+ wait_check_tolerance_raw)
84
+ SET_TLM_KEYWORDS = %w(set_tlm set_tlm_raw override_tlm_raw normalize_tlm_raw)
85
+ CHECK_KEYWORDS = %w(check check_raw wait wait_raw wait_check wait_check_raw)
86
+
87
+ attr_accessor :use_instrumentation
88
+ attr_accessor :change_callback
89
+ attr_accessor :run_callback
90
+ attr_accessor :stop_callback
91
+ attr_accessor :error_callback
92
+ attr_accessor :pause_callback
93
+ attr_reader :filename
94
+ attr_accessor :continue_after_error
95
+ attr_accessor :exceptions
96
+ attr_accessor :script_binding
97
+ attr_accessor :inline_return
98
+ attr_accessor :inline_return_params
99
+ attr_reader :message_log
100
+ attr_reader :script_class
101
+ attr_reader :top_level_instrumented_cache
102
+ attr_accessor :stdout_max_lines
103
+ attr_reader :script
104
+
105
+ @@instance = nil
106
+ @@run_thread = nil
107
+ @@breakpoints = {}
108
+ @@step_mode = false
109
+ @@line_delay = 0.1
110
+ @@instrumented_cache = {}
111
+ @@file_cache = {}
112
+ @@output_thread = nil
113
+ @@limits_monitor_thread = nil
114
+ @@pause_on_error = true
115
+ @@monitor_limits = false
116
+ @@pause_on_red = false
117
+ @@show_backtrace = false
118
+ @@error = nil
119
+ @@output_sleeper = Sleeper.new
120
+ @@limits_sleeper = Sleeper.new
121
+ @@cancel_output = false
122
+ @@cancel_limits = false
123
+ @@file_number = 1
124
+
125
+ def initialize(parent, default_tab_text = 'Untitled')
126
+ super(parent)
127
+ @default_tab_text = ' ' + default_tab_text + ' '
128
+ # Keep track of whether this frame has been fully initialized
129
+ @initialized = false
130
+ @debug_frame = nil
131
+
132
+ # Keep track of a unique file number so we can differentiate untitled tabs
133
+ @file_number = @@file_number
134
+ @@file_number +=1
135
+ @filename = ''
136
+
137
+ @layout = Qt::VBoxLayout.new
138
+ @layout.setContentsMargins(0,0,0,0)
139
+
140
+ # Add Realtime Button Bar
141
+ @realtime_button_bar = RealtimeButtonBar.new(self)
142
+ @realtime_button_bar.state = 'Stopped'
143
+ @realtime_button_bar.start_callback = method(:handle_start_go_button)
144
+ @realtime_button_bar.pause_callback = method(:handle_pause_retry_button)
145
+ @realtime_button_bar.stop_callback = method(:handle_stop_button)
146
+ @layout.addWidget(@realtime_button_bar)
147
+
148
+ # Create a splitter to hold the script text area and the script output text area.
149
+ @splitter = Qt::Splitter.new(Qt::Vertical, self)
150
+ @layout.addWidget(@splitter)
151
+ @top_widget = Qt::Widget.new(@splitter)
152
+ @top_widget.setContentsMargins(0,0,0,0)
153
+ @top_frame = Qt::VBoxLayout.new(@top_widget)
154
+ @top_frame.setContentsMargins(0,0,0,0)
155
+
156
+ # Add Initial Text Window
157
+ @script = create_ruby_editor()
158
+ @script.filename = unique_filename()
159
+ @script.connect(SIGNAL('modificationChanged(bool)')) do |changed|
160
+ emit modificationChanged(changed)
161
+ end
162
+ @top_frame.addWidget(@script)
163
+
164
+ # Set self as the gui window to allow prompts and other popups to appear
165
+ set_cmd_tlm_gui_window(self)
166
+
167
+ # Add change handlers
168
+ connect(@script,
169
+ SIGNAL('undoAvailable(bool)'),
170
+ self,
171
+ SLOT('undo_available(bool)'))
172
+
173
+ # Add Output Text
174
+ @bottom_frame = Qt::Widget.new
175
+ @bottom_layout = Qt::VBoxLayout.new
176
+ @bottom_layout.setContentsMargins(0,0,0,0)
177
+ @bottom_layout_label = Qt::Label.new("Script Output:")
178
+ @bottom_layout.addWidget(@bottom_layout_label)
179
+ @output = Qt::PlainTextEdit.new
180
+ @output.setReadOnly(true)
181
+ @output.setMaximumBlockCount(100)
182
+ @bottom_layout.addWidget(@output)
183
+ @bottom_frame.setLayout(@bottom_layout)
184
+ @splitter.addWidget(@bottom_frame)
185
+ @splitter.setStretchFactor(0,10)
186
+ @splitter.setStretchFactor(1,1)
187
+
188
+ setLayout(@layout)
189
+
190
+ # Configure Variables
191
+ @line_offset = 0
192
+ @output_io = StringIO.new('', 'r+')
193
+ @output_io_mutex = Mutex.new
194
+ @change_callback = nil
195
+ @run_callback = nil
196
+ @stop_callback = nil
197
+ @error_callback = nil
198
+ @pause_callback = nil
199
+ @key_press_callback = nil
200
+ @allow_start = true
201
+ @continue_after_error = true
202
+ @debug_text = nil
203
+ @debug_history = []
204
+ @debug_code_completion = nil
205
+ @top_level_instrumented_cache = nil
206
+ @output_time = Time.now.sys
207
+ initialize_variables()
208
+
209
+ # Redirect $stdout and $stderr
210
+ redirect_io()
211
+
212
+ # Create Tabbook
213
+ @tab_book = Qt::TabWidget.new
214
+ @tab_book_shown = false
215
+
216
+ @find_dialog = nil
217
+ @replace_dialog = nil
218
+
219
+ mark_breakpoints(@script.filename)
220
+ end
221
+
222
+ def unique_filename
223
+ if @filename and !@filename.empty?
224
+ return @filename
225
+ else
226
+ return @default_tab_text.strip + @file_number.to_s
227
+ end
228
+ end
229
+
230
+ def current_tab_filename
231
+ if @tab_book_shown
232
+ return @tab_book.widget(@tab_book.currentIndex).filename
233
+ else
234
+ return @script.filename
235
+ end
236
+ end
237
+
238
+ def create_ruby_editor
239
+ # Add Initial Text Window
240
+ script = RubyEditor.new(self)
241
+ script.enable_breakpoints = true if @debug_frame
242
+ connect(script,
243
+ SIGNAL('breakpoint_set(int)'),
244
+ self,
245
+ SLOT('breakpoint_set(int)'))
246
+ connect(script,
247
+ SIGNAL('breakpoint_cleared(int)'),
248
+ self,
249
+ SLOT('breakpoint_cleared(int)'))
250
+ connect(script,
251
+ SIGNAL('breakpoints_cleared()'),
252
+ self,
253
+ SLOT('breakpoints_cleared()'))
254
+
255
+ # Add right click menu
256
+ script.setContextMenuPolicy(Qt::CustomContextMenu)
257
+ connect(script,
258
+ SIGNAL('customContextMenuRequested(const QPoint&)'),
259
+ self,
260
+ SLOT('context_menu(const QPoint&)'))
261
+
262
+ return script
263
+ end
264
+
265
+ def stop_message_log
266
+ @message_log.stop if @message_log
267
+ @message_log = nil
268
+ end
269
+
270
+ def filename=(filename)
271
+ # Stop the message log so a new one will be created with the new filename
272
+ stop_message_log()
273
+ @filename = filename
274
+
275
+ # Deal with breakpoints created under the previous filename.
276
+ bkpt_filename = unique_filename()
277
+ if @@breakpoints[bkpt_filename].nil?
278
+ @@breakpoints[bkpt_filename] = @@breakpoints[@script.filename]
279
+ end
280
+ if bkpt_filename != @script.filename
281
+ @@breakpoints.delete(@script.filename)
282
+ @script.filename = bkpt_filename
283
+ end
284
+ mark_breakpoints(@script.filename)
285
+ end
286
+
287
+ def modified
288
+ @script.document.isModified()
289
+ end
290
+
291
+ def modified=(bool)
292
+ @script.document.setModified(bool)
293
+ end
294
+
295
+ def undo_available(bool)
296
+ emit undoAvailable(bool)
297
+ end
298
+
299
+ def key_press_callback=(callback)
300
+ @script.keyPressCallback = callback
301
+ end
302
+
303
+ def setFocus
304
+ @script.setFocus
305
+ end
306
+
307
+ def allow_start=(value)
308
+ @allow_start = value
309
+ if @allow_start
310
+ @realtime_button_bar.start_button.setEnabled(true)
311
+ elsif not running?
312
+ @realtime_button_bar.start_button.setEnabled(false)
313
+ @script.setReadOnly(true)
314
+ end
315
+ end
316
+
317
+ def clear
318
+ self.set_text('')
319
+ self.filename = ''
320
+ @script.filename = unique_filename()
321
+ self.modified = false
322
+ end
323
+
324
+ def self.instance
325
+ @@instance
326
+ end
327
+
328
+ def self.instance=(value)
329
+ @@instance = value
330
+ end
331
+
332
+ def self.step_mode
333
+ @@step_mode
334
+ end
335
+
336
+ def self.step_mode=(value)
337
+ @@step_mode = value
338
+ if self.instance
339
+ if value
340
+ self.instance.pause
341
+ else
342
+ self.instance.go
343
+ end
344
+ end
345
+ end
346
+
347
+ def self.line_delay
348
+ @@line_delay
349
+ end
350
+
351
+ def self.line_delay=(value)
352
+ @@line_delay = value
353
+ end
354
+
355
+ def self.instrumented_cache
356
+ @@instrumented_cache
357
+ end
358
+
359
+ def self.instrumented_cache=(value)
360
+ @@instrumented_cache = value
361
+ end
362
+
363
+ def self.file_cache
364
+ @@file_cache
365
+ end
366
+
367
+ def self.file_cache=(value)
368
+ @@file_cache = value
369
+ end
370
+
371
+ def self.pause_on_error
372
+ @@pause_on_error
373
+ end
374
+
375
+ def self.pause_on_error=(value)
376
+ @@pause_on_error = value
377
+ end
378
+
379
+ def self.monitor_limits
380
+ @@monitor_limits
381
+ end
382
+
383
+ def self.monitor_limits=(value)
384
+ @@monitor_limits = value
385
+ end
386
+
387
+ def self.pause_on_red
388
+ @@pause_on_red
389
+ end
390
+
391
+ def self.pause_on_red=(value)
392
+ @@pause_on_red = value
393
+ end
394
+
395
+ def self.show_backtrace
396
+ @@show_backtrace
397
+ end
398
+
399
+ def self.show_backtrace=(value)
400
+ @@show_backtrace = value
401
+ if @@show_backtrace and @@error
402
+ puts Time.now.sys.formatted + " (SCRIPTRUNNER): " + "Most recent exception:\n" + @@error.formatted
403
+ end
404
+ end
405
+
406
+ def text
407
+ @script.toPlainText.gsub("\r", '')
408
+ end
409
+
410
+ def set_text(text, filename = '')
411
+ unless running?()
412
+ @script.setPlainText(text)
413
+ @script.stop_highlight
414
+ @filename = filename
415
+ @script.filename = unique_filename()
416
+ mark_breakpoints(@script.filename)
417
+ end
418
+ end
419
+
420
+ def set_text_from_file(filename)
421
+ unless running?()
422
+ @@file_cache[filename] = nil
423
+ @@breakpoints[filename] = nil
424
+ load_file_into_script(filename)
425
+ @filename = filename
426
+ end
427
+ end
428
+
429
+ def self.running?
430
+ if @@run_thread then true else false end
431
+ end
432
+
433
+ def running?
434
+ if @@instance == self and ScriptRunnerFrame.running?() then true else false end
435
+ end
436
+
437
+ def go
438
+ @go = true
439
+ @pause = false unless @@step_mode
440
+ end
441
+
442
+ def go?
443
+ temp = @go
444
+ @go = false
445
+ temp
446
+ end
447
+
448
+ def pause
449
+ @pause = true
450
+ @go = false
451
+ end
452
+
453
+ def pause?
454
+ @pause
455
+ end
456
+
457
+ def self.stop!
458
+ if @@run_thread
459
+ Cosmos.kill_thread(nil, @@run_thread)
460
+ @@run_thread = nil
461
+ end
462
+ end
463
+
464
+ def stop?
465
+ @stop
466
+ end
467
+
468
+ def retry_needed?
469
+ @retry_needed
470
+ end
471
+
472
+ def retry_needed
473
+ @retry_needed = true
474
+ end
475
+
476
+ def disable_retry
477
+ @realtime_button_bar.start_button.setText('Skip')
478
+ @realtime_button_bar.pause_button.setDisabled(true)
479
+ end
480
+
481
+ def enable_retry
482
+ @realtime_button_bar.start_button.setText('Go')
483
+ @realtime_button_bar.pause_button.setDisabled(false)
484
+ end
485
+
486
+ def run
487
+ unless self.class.running?()
488
+ run_text(@script.toPlainText)
489
+ end
490
+ end
491
+
492
+ def run_and_close_on_complete(text_binding = nil)
493
+ run_text(@script.toPlainText, 0, text_binding, true)
494
+ end
495
+
496
+ def self.instrument_script(text, filename, mark_private = false)
497
+ if filename and !filename.empty?
498
+ @@file_cache[filename] = text.clone
499
+ end
500
+
501
+ ruby_lex_utils = RubyLexUtils.new
502
+ instrumented_text = ''
503
+
504
+ Qt.execute_in_main_thread(true) do
505
+ window = Qt::CoreApplication.instance.activeWindow
506
+ @cancel_instrumentation = false
507
+ ProgressDialog.execute(window, # parent
508
+ "Instrumenting: #{File.basename(filename.to_s)}",
509
+ 500, # width
510
+ 100, # height
511
+ true, # show overall progress
512
+ false, # don't show step progress
513
+ false, # don't show text
514
+ false, # don't show done
515
+ true) do |progress_dialog| # show cancel
516
+ progress_dialog.cancel_callback = lambda { |dialog| @cancel_instrumentation = true; [true, false] }
517
+ progress_dialog.enable_cancel_button
518
+ comments_removed_text = ruby_lex_utils.remove_comments(text)
519
+ num_lines = comments_removed_text.num_lines.to_f
520
+ num_lines = 1 if num_lines < 1
521
+ instrumented_text =
522
+ instrument_script_implementation(ruby_lex_utils,
523
+ comments_removed_text,
524
+ num_lines,
525
+ progress_dialog,
526
+ filename,
527
+ mark_private)
528
+ progress_dialog.close_done
529
+ end
530
+ end
531
+
532
+ Kernel.raise StopScript if @cancel_instrumentation or ProgressDialog.canceled?
533
+ instrumented_text
534
+ end
535
+
536
+ def self.instrument_script_implementation(ruby_lex_utils,
537
+ comments_removed_text,
538
+ num_lines,
539
+ progress_dialog,
540
+ filename,
541
+ mark_private = false)
542
+ if mark_private
543
+ instrumented_text = 'private; '
544
+ else
545
+ instrumented_text = ''
546
+ end
547
+
548
+ ruby_lex_utils.each_lexed_segment(comments_removed_text) do |segment, instrumentable, inside_begin, line_no|
549
+ return nil if @cancel_instrumentation
550
+ instrumented_line = ''
551
+ if instrumentable
552
+ # If not inside a begin block then create one to catch exceptions
553
+ unless inside_begin
554
+ instrumented_line << 'begin; '
555
+ end
556
+
557
+ # Add preline instrumentation
558
+ instrumented_line << "ScriptRunnerFrame.instance.script_binding = binding(); if ScriptRunnerFrame.instance.inline_return then ScriptRunnerFrame.instance.inline_return = nil; return ScriptRunnerFrame.instance.inline_return_params; end; ScriptRunnerFrame.instance.pre_line_instrumentation('#{filename}', #{line_no}); "
559
+
560
+ # Add the actual line
561
+ instrumented_line << segment
562
+ instrumented_line.chomp!
563
+
564
+ # Add postline instrumentation
565
+ instrumented_line << "; ScriptRunnerFrame.instance.post_line_instrumentation('#{filename}', #{line_no})"
566
+
567
+ # Complete begin block to catch exceptions
568
+ unless inside_begin
569
+ instrumented_line << "; rescue Exception => eval_error; retry if ScriptRunnerFrame.instance.exception_instrumentation(eval_error, '#{filename}', #{line_no}); end"
570
+ end
571
+
572
+ instrumented_line << "\n"
573
+ else
574
+ unless segment =~ /^\s*end\s*$/ or segment =~ /^\s*when .*$/
575
+ num_left_brackets = segment.count('{')
576
+ num_right_brackets = segment.count('}')
577
+ num_left_square_brackets = segment.count('[')
578
+ num_right_square_brackets = segment.count(']')
579
+
580
+ if (num_right_brackets > num_left_brackets) ||
581
+ (num_right_square_brackets > num_left_square_brackets)
582
+ instrumented_line = segment
583
+ else
584
+ instrumented_line = "ScriptRunnerFrame.instance.pre_line_instrumentation('#{filename}', #{line_no}); " + segment
585
+ end
586
+ else
587
+ instrumented_line = segment
588
+ end
589
+ end
590
+
591
+ instrumented_text << instrumented_line
592
+
593
+ progress_dialog.set_overall_progress(line_no / num_lines) if progress_dialog and line_no
594
+ end
595
+ instrumented_text
596
+ end
597
+
598
+ def pre_line_instrumentation(filename, line_number)
599
+ @current_filename = filename
600
+ @current_line_number = line_number
601
+ if @use_instrumentation
602
+ # Clear go
603
+ @go = false
604
+
605
+ # Handle stopping mid-script if necessary
606
+ Kernel.raise StopScript if @stop
607
+
608
+ # Handle needing to change tabs
609
+ handle_potential_tab_change(filename)
610
+
611
+ # Adjust line number for offset in main script
612
+ line_number = line_number + @line_offset if @active_script.object_id == @script.object_id
613
+ detail_string = nil
614
+ if filename
615
+ detail_string = File.basename(filename) << ':' << line_number.to_s
616
+ end
617
+ Logger.detail_string = detail_string
618
+
619
+ # Highlight the line that is about to run
620
+ Qt.execute_in_main_thread(true) do
621
+ @active_script.center_line(line_number)
622
+ @active_script.highlight_line
623
+ end
624
+
625
+ # Handle pausing the script
626
+ handle_pause(filename, line_number)
627
+
628
+ # Handle delay between lines
629
+ handle_line_delay()
630
+ end
631
+ end
632
+
633
+ def post_line_instrumentation(filename, line_number)
634
+ if @use_instrumentation
635
+ line_number = line_number + @line_offset if @active_script.object_id == @script.object_id
636
+ handle_output_io(filename, line_number)
637
+ end
638
+ end
639
+
640
+ def exception_instrumentation(error, filename, line_number)
641
+ if error.class == StopScript || error.class == SkipTestCase || !@use_instrumentation
642
+ Kernel.raise error
643
+ else
644
+ line_number = line_number + @line_offset if @active_script.object_id == @script.object_id
645
+ handle_exception(error, false, filename, line_number)
646
+ end
647
+ end
648
+
649
+ def perform_pause
650
+ mark_paused()
651
+ wait_for_go_or_stop()
652
+ end
653
+
654
+ def perform_breakpoint(filename, line_number)
655
+ mark_breakpoint()
656
+ scriptrunner_puts "Hit Breakpoint at #{filename}:#{line_number}"
657
+ handle_output_io(filename, line_number)
658
+ wait_for_go_or_stop()
659
+ end
660
+
661
+ # Prompts the user that a script is running before they close the app
662
+ def prompt_if_running_on_close
663
+ safe_to_continue = true
664
+ if running?
665
+ case Qt::MessageBox.warning(
666
+ self, # parent
667
+ 'Warning', # title
668
+ 'A Script is Running! Close Anyways?', # text
669
+ Qt::MessageBox::Yes | Qt::MessageBox::No, # buttons
670
+ Qt::MessageBox::No) # default button
671
+ when Qt::MessageBox::Yes
672
+ safe_to_continue = true
673
+ ScriptRunnerFrame.stop!
674
+ else
675
+ safe_to_continue = false
676
+ end
677
+ end
678
+ return safe_to_continue
679
+ end
680
+
681
+ ######################################
682
+ # Implement the breakpoint callbacks from the RubyEditor
683
+ ######################################
684
+ def breakpoint_set(line)
685
+ ScriptRunnerFrame.set_breakpoint(current_tab_filename(), line)
686
+ end
687
+
688
+ def breakpoint_cleared(line)
689
+ ScriptRunnerFrame.clear_breakpoint(current_tab_filename(), line)
690
+ end
691
+
692
+ def breakpoints_cleared
693
+ ScriptRunnerFrame.clear_breakpoints(current_tab_filename())
694
+ end
695
+
696
+ ######################################
697
+ # Implement edit functionality in the frame (cut, copy, paste, etc)
698
+ ######################################
699
+ def undo
700
+ @script.undo unless running?()
701
+ end
702
+
703
+ def redo
704
+ @script.redo unless running?()
705
+ end
706
+
707
+ def cut
708
+ @script.cut unless running?()
709
+ end
710
+
711
+ def copy
712
+ @script.copy unless running?()
713
+ end
714
+
715
+ def paste
716
+ @script.paste unless running?()
717
+ end
718
+
719
+ def select_all
720
+ @script.select_all unless running?()
721
+ end
722
+
723
+ def comment_or_uncomment_lines
724
+ @script.comment_or_uncomment_lines unless running?()
725
+ end
726
+
727
+ ##################################################################################
728
+ # Implement Script functionality in the frame (run selection, run from cursor, etc
729
+ ##################################################################################
730
+ def run_selection
731
+ unless self.class.running?()
732
+ selection = @script.selected_lines
733
+ if selection
734
+ start_line_number = @script.selection_start_line
735
+ end_line_number = @script.selection_end_line
736
+ scriptrunner_puts "Running script lines #{start_line_number+1}-#{end_line_number+1}: #{File.basename(@filename)}"
737
+ handle_output_io()
738
+ run_text(selection, start_line_number)
739
+ end
740
+ end
741
+ end
742
+
743
+ def run_selection_while_paused
744
+ current_script = @tab_book.widget(@tab_book.currentIndex)
745
+ selection = current_script.selected_lines
746
+ if selection
747
+ start_line_number = current_script.selection_start_line
748
+ end_line_number = current_script.selection_end_line
749
+ scriptrunner_puts "Debug: Running selected lines #{start_line_number+1}-#{end_line_number+1}: #{@tab_book.tabText(@tab_book.currentIndex)}"
750
+ handle_output_io()
751
+ dialog = ScriptRunnerDialog.new(self, 'Executing Selected Lines While Paused')
752
+ dialog.execute_text_and_close_on_complete(selection, @script_binding)
753
+ handle_output_io()
754
+ end
755
+ end
756
+
757
+ def run_from_cursor
758
+ unless self.class.running?()
759
+ line_number = @script.selection_start_line
760
+ text = @script.toPlainText.split("\n")[line_number..-1].join("\n")
761
+ scriptrunner_puts "Running script from line #{line_number}: #{File.basename(@filename)}"
762
+ handle_output_io()
763
+ run_text(text, line_number)
764
+ end
765
+ end
766
+
767
+ def ruby_syntax_check_selection
768
+ unless self.class.running?()
769
+ selection = @script.selected_lines
770
+ ruby_syntax_check_text(selection) if selection
771
+ end
772
+ end
773
+
774
+ def ruby_syntax_check_text(selection = nil)
775
+ unless self.class.running?()
776
+ selection = text() unless selection
777
+ check_process = IO.popen("ruby -c -rubygems 2>&1", 'r+')
778
+ check_process.write("require 'cosmos'; require 'cosmos/script'; " + selection)
779
+ check_process.close_write
780
+ results = check_process.gets
781
+ check_process.close
782
+ if results
783
+ if results =~ /Syntax OK/
784
+ Qt::MessageBox.information(self, 'Syntax Check Successful', results)
785
+ else
786
+ # Results is a string like this: ":2: syntax error ..."
787
+ # Normally the procedure comes before the first colon but since we
788
+ # are writing to the process this is blank so we throw it away
789
+ _, line_no, error = results.split(':')
790
+ Qt::MessageBox.warning(self,
791
+ 'Syntax Check Failed',
792
+ "Error on line #{line_no}: #{error.strip}")
793
+ end
794
+ else
795
+ Qt::MessageBox.critical(self,
796
+ 'Syntax Check Exception',
797
+ 'Ruby syntax check unexpectedly returned nil')
798
+ end
799
+ end
800
+ end
801
+
802
+ def mnemonic_check_selection
803
+ unless self.class.running?()
804
+ selection = @script.selected_lines
805
+ mnemonic_check_text(selection, @script.selection_start_line+1) if selection
806
+ end
807
+ end
808
+
809
+ def mnemonic_check_text(text, start_line_number = 1)
810
+ results = []
811
+ line_number = start_line_number
812
+ text.each_line do |line|
813
+ if line =~ /\(/
814
+ result = nil
815
+ keyword = line.split('(')[0].split[-1]
816
+ if CMD_KEYWORDS.include? keyword
817
+ result = mnemonic_check_cmd_line(keyword, line_number, line)
818
+ elsif TLM_KEYWORDS.include? keyword
819
+ result = mnemonic_check_tlm_line(keyword, line_number, line)
820
+ elsif SET_TLM_KEYWORDS.include? keyword
821
+ result = mnemonic_check_set_tlm_line(keyword, line_number, line)
822
+ elsif CHECK_KEYWORDS.include? keyword
823
+ result = mnemonic_check_check_line(keyword, line_number, line)
824
+ end
825
+ results << result if result
826
+ end
827
+ line_number += 1
828
+ end
829
+
830
+ if results.empty?
831
+ Qt::MessageBox.information(self,
832
+ 'Mnemonic Check Successful',
833
+ 'Mnemonic Check Found No Errors')
834
+ else
835
+ dialog = Qt::Dialog.new(self) do |box|
836
+ box.setWindowTitle('Mnemonic Check Failed')
837
+ text = Qt::PlainTextEdit.new
838
+ text.setReadOnly(true)
839
+ text.setPlainText(results.join("\n"))
840
+ frame = Qt::VBoxLayout.new(box)
841
+ ok = Qt::PushButton.new('Ok')
842
+ ok.setDefault(true)
843
+ ok.connect(SIGNAL('clicked(bool)')) { box.accept }
844
+ frame.addWidget(text)
845
+ frame.addWidget(ok)
846
+ end
847
+ dialog.exec
848
+ dialog.dispose
849
+ end
850
+ end
851
+
852
+ ######################################################
853
+ # Implement the debug capability
854
+ ######################################################
855
+ def toggle_debug(debug = nil)
856
+ if debug.nil?
857
+ if @debug_frame
858
+ hide_debug()
859
+ else
860
+ show_debug()
861
+ end
862
+ else
863
+ if debug
864
+ if !@debug_frame
865
+ show_debug()
866
+ end
867
+ else
868
+ if @debug_frame
869
+ hide_debug()
870
+ end
871
+ end
872
+ end
873
+ end
874
+
875
+ def show_debug
876
+ unless @debug_frame
877
+ @script.enable_breakpoints = true
878
+ if @tab_book_shown
879
+ if @tab_book.count > 0
880
+ (0..(@tab_book.count - 1)).each do |index|
881
+ @tab_book.widget(index).enable_breakpoints = true
882
+ end
883
+ end
884
+ end
885
+
886
+ @debug_frame = Qt::HBoxLayout.new
887
+ @debug_frame.setContentsMargins(0,0,0,0)
888
+ @debug_frame_label = Qt::Label.new("Debug:")
889
+ @debug_frame.addWidget(@debug_frame_label)
890
+ @debug_text = CompletionLineEdit.new(self)
891
+ @debug_text.setFocus(Qt::OtherFocusReason)
892
+ @debug_text.keyPressCallback = lambda { |event|
893
+ case event.key
894
+ when Qt::Key_Return, Qt::Key_Enter
895
+ begin
896
+ debug_text = @debug_text.toPlainText
897
+ @debug_history.unshift(debug_text)
898
+ @debug_history_index = 0
899
+ @debug_text.setPlainText('')
900
+ scriptrunner_puts "Debug: #{debug_text}"
901
+ handle_output_io()
902
+ if not running?
903
+ # Capture STDOUT and STDERR
904
+ $stdout.add_stream(@output_io)
905
+ $stderr.add_stream(@output_io)
906
+ end
907
+
908
+ if @script_binding
909
+ eval(debug_text, @script_binding, 'debug', 1)
910
+ else
911
+ Object.class_eval(debug_text, 'debug', 1)
912
+ end
913
+ handle_output_io()
914
+ rescue Exception => error
915
+ if error.class == DRb::DRbConnError
916
+ Logger.error("Error Connecting to Command and Telemetry Server")
917
+ else
918
+ Logger.error(error.class.to_s.split('::')[-1] + ' : ' + error.message)
919
+ end
920
+ handle_output_io()
921
+ ensure
922
+ if not running?
923
+ # Capture STDOUT and STDERR
924
+ $stdout.remove_stream(@output_io)
925
+ $stderr.remove_stream(@output_io)
926
+ end
927
+ end
928
+ when Qt::Key_Up
929
+ if @debug_history.length > 0
930
+ @debug_text.setPlainText(@debug_history[@debug_history_index])
931
+ @debug_history_index += 1
932
+ if @debug_history_index == @debug_history.length
933
+ @debug_history_index = @debug_history.length-1
934
+ end
935
+ end
936
+ when Qt::Key_Down
937
+ if @debug_history.length > 0
938
+ @debug_text.setPlainText(@debug_history[@debug_history_index])
939
+ @debug_history_index -= 1
940
+ @debug_history_index = 0 if @debug_history_index < 0
941
+ end
942
+ when Qt::Key_Escape
943
+ @debug_text.setPlainText("")
944
+ end
945
+ }
946
+
947
+ @debug_frame.addWidget(@debug_text)
948
+
949
+ @toggle_button = Qt::PushButton.new('Toggle Run/Step')
950
+ @debug_frame.addWidget(@toggle_button)
951
+ @toggle_button.connect(SIGNAL('clicked(bool)')) do
952
+ if @@step_mode
953
+ scriptrunner_puts "Debug: run_mode"
954
+ handle_output_io()
955
+ self.class.step_mode = false
956
+ else
957
+ scriptrunner_puts "Debug: step_mode"
958
+ handle_output_io()
959
+ self.class.step_mode = true
960
+ end
961
+ end
962
+
963
+ @return_button = Qt::PushButton.new('Insert Return')
964
+ @debug_frame.addWidget(@return_button)
965
+ @return_button.connect(SIGNAL('clicked(bool)')) do
966
+ scriptrunner_puts "Debug: insert_return(); ScriptRunnerFrame.instance.go()"
967
+ handle_output_io()
968
+ insert_return()
969
+ go()
970
+ end
971
+
972
+ @bottom_frame.layout.addLayout(@debug_frame)
973
+ end
974
+ end
975
+
976
+ def hide_debug
977
+ # Since we're disabling debug, clear the breakpoints and disable them
978
+ ScriptRunnerFrame.clear_breakpoints()
979
+ @script.clear_breakpoints
980
+ @script.enable_breakpoints = false
981
+ if @tab_book_shown
982
+ if @tab_book.count > 0
983
+ (0..(@tab_book.count - 1)).each do |index|
984
+ @tab_book.widget(index).enable_breakpoints = false
985
+ end
986
+ end
987
+ end
988
+ # Remove the debug frame
989
+ @bottom_frame.layout.takeAt(@bottom_frame.layout.count - 1) if @debug_frame
990
+ @debug_frame.removeAll
991
+ @debug_frame.dispose
992
+ @debug_frame = nil
993
+ end
994
+
995
+ def self.set_breakpoint(filename, line_number)
996
+ @@breakpoints[filename] ||= {}
997
+ @@breakpoints[filename][line_number] = true
998
+ end
999
+
1000
+ def self.clear_breakpoint(filename, line_number)
1001
+ @@breakpoints[filename] ||= {}
1002
+ @@breakpoints[filename].delete(line_number) if @@breakpoints[filename][line_number]
1003
+ end
1004
+
1005
+ def self.clear_breakpoints(filename = nil)
1006
+ if filename == nil or filename.empty?
1007
+ @@breakpoints = {}
1008
+ else
1009
+ @@breakpoints.delete(filename)
1010
+ end
1011
+ end
1012
+
1013
+ def clear_breakpoints
1014
+ ScriptRunnerFrame.clear_breakpoints(unique_filename())
1015
+ end
1016
+
1017
+ def select_tab_and_destroy_tabs_after_index(index)
1018
+ Qt.execute_in_main_thread(true) do
1019
+ if @tab_book_shown
1020
+ @tab_book.setCurrentIndex(index)
1021
+ @active_script = @tab_book.widget(@tab_book.currentIndex)
1022
+
1023
+ first_to_remove = index + 1
1024
+ last_to_remove = @call_stack.length - 1
1025
+
1026
+ last_to_remove.downto(first_to_remove) do |tab_index|
1027
+ tab = @tab_book.widget(tab_index)
1028
+ @tab_book.removeTab(tab_index)
1029
+ tab.dispose
1030
+ end
1031
+
1032
+ @call_stack = @call_stack[0..index]
1033
+ @current_file = @call_stack[index]
1034
+ end
1035
+ end
1036
+ end
1037
+
1038
+ def toggle_disconnect(config_file)
1039
+ if get_cmd_tlm_disconnect
1040
+ set_cmd_tlm_disconnect(false)
1041
+ self.parent.setPalette(Cosmos::DEFAULT_PALETTE)
1042
+ else
1043
+ dialog = Qt::Dialog.new(self, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
1044
+ dialog.setWindowTitle(tr("Server Config File"))
1045
+ dialog_layout = Qt::VBoxLayout.new
1046
+
1047
+ chooser = FileChooser.new(self, "Config File", config_file, 'Select',
1048
+ File.dirname(config_file))
1049
+ chooser.callback = lambda do |filename|
1050
+ chooser.filename = filename
1051
+ end
1052
+ dialog_layout.addWidget(chooser)
1053
+
1054
+ button_layout = Qt::HBoxLayout.new
1055
+ ok = Qt::PushButton.new("Ok")
1056
+ ok.setDefault(true)
1057
+ ok.connect(SIGNAL('clicked()')) do
1058
+ dialog.accept()
1059
+ end
1060
+ button_layout.addWidget(ok)
1061
+ cancel = Qt::PushButton.new("Cancel")
1062
+ cancel.connect(SIGNAL('clicked()')) do
1063
+ dialog.reject()
1064
+ end
1065
+ button_layout.addWidget(cancel)
1066
+ dialog_layout.addLayout(button_layout)
1067
+
1068
+ dialog.setLayout(dialog_layout)
1069
+ if dialog.exec == Qt::Dialog::Accepted
1070
+ config_file = chooser.filename
1071
+ self.parent.setPalette(Cosmos::RED_PALETTE)
1072
+ Splash.execute(self) do |splash|
1073
+ ConfigParser.splash = splash
1074
+ splash.message = "Initializing Command and Telemetry Server"
1075
+ set_cmd_tlm_disconnect(true, config_file)
1076
+ ConfigParser.splash = nil
1077
+ end
1078
+ end
1079
+ dialog.dispose
1080
+ end
1081
+ config_file
1082
+ end
1083
+
1084
+ def current_backtrace
1085
+ trace = []
1086
+ Qt.execute_in_main_thread(true) do
1087
+ if @@run_thread
1088
+ temp_trace = @@run_thread.backtrace
1089
+ cosmos_lib = Regexp.new(File.join(Cosmos::PATH, 'lib'))
1090
+ temp_trace.each do |line|
1091
+ next if line =~ cosmos_lib
1092
+ trace << line
1093
+ end
1094
+ end
1095
+ end
1096
+ trace
1097
+ end
1098
+
1099
+ def scriptrunner_puts(string)
1100
+ puts Time.now.sys.formatted + " (SCRIPTRUNNER): " + string
1101
+ end
1102
+
1103
+ def handle_output_io(filename = @current_filename, line_number = @current_line_number)
1104
+ @output_time = Time.now.sys
1105
+ Qt.execute_in_main_thread(true) do
1106
+ if @output_io.string[-1..-1] == "\n"
1107
+ time_formatted = Time.now.sys.formatted
1108
+ lines_to_write = ''
1109
+ out_line_number = line_number.to_s
1110
+ out_filename = File.basename(filename) if filename
1111
+
1112
+ # Build each line to write
1113
+ string = @output_io.string.clone
1114
+ @output_io.string = @output_io.string[string.length..-1]
1115
+ line_count = 0
1116
+ string.each_line do |out_line|
1117
+ color = nil
1118
+ if out_line[0..1] == '20' and out_line[10] == ' ' and out_line[23..24] == ' ('
1119
+ line_to_write = out_line
1120
+ else
1121
+ if filename
1122
+ line_to_write = time_formatted + " (#{out_filename}:#{out_line_number}): " + out_line
1123
+ else
1124
+ line_to_write = time_formatted + " (SCRIPTRUNNER): " + out_line
1125
+ color = Cosmos::BLUE
1126
+ end
1127
+ end
1128
+ @output.add_formatted_text(line_to_write, color)
1129
+ lines_to_write << line_to_write
1130
+
1131
+ line_count += 1
1132
+ if line_count > @stdout_max_lines
1133
+ out_line = "ERROR: Too much written to stdout. Truncating output to #{@stdout_max_lines} lines.\n"
1134
+ if filename
1135
+ line_to_write = time_formatted + " (#{out_filename}:#{out_line_number}): " + out_line
1136
+ else
1137
+ line_to_write = time_formatted + " (SCRIPTRUNNER): " + out_line
1138
+ end
1139
+ @output.addText(line_to_write, Cosmos::RED)
1140
+ lines_to_write << line_to_write
1141
+ break
1142
+ end
1143
+ end # string.each_line
1144
+
1145
+ # Actually add to the GUI
1146
+ @output.flush
1147
+
1148
+ # Add to the message log
1149
+ if @filename.empty?
1150
+ @message_log ||= MessageLog.new("sr_untitled")
1151
+ else
1152
+ @message_log ||= MessageLog.new("sr_#{File.basename(@filename).split('.')[0]}")
1153
+ end
1154
+ @message_log.write(lines_to_write)
1155
+ end
1156
+ end
1157
+ end
1158
+
1159
+ def graceful_kill
1160
+ # Just to avoid warning
1161
+ end
1162
+
1163
+ protected
1164
+
1165
+ def initialize_variables
1166
+ @@error = nil
1167
+ @go = false
1168
+ if @@step_mode
1169
+ @pause = true
1170
+ else
1171
+ @pause = false
1172
+ end
1173
+ @stop = false
1174
+ @retry_needed = false
1175
+ @use_instrumentation = true
1176
+ @active_script = @script
1177
+ @call_stack = []
1178
+ @pre_line_time = Time.now.sys
1179
+ @current_file = @filename
1180
+ @exceptions = nil
1181
+ @script_binding = nil
1182
+ @inline_eval = nil
1183
+ @current_filename = nil
1184
+ @current_line_number = 0
1185
+ @stdout_max_lines = 1000
1186
+
1187
+ @script.stop_highlight
1188
+ @call_stack.push(@current_file.dup)
1189
+ end
1190
+
1191
+ def wait_for_go_or_stop(error = nil)
1192
+ @go = false
1193
+ sleep(0.01) until @go or @stop
1194
+ @go = false
1195
+ mark_running()
1196
+ Kernel.raise StopScript if @stop
1197
+ Kernel.raise error if error and !@continue_after_error
1198
+ end
1199
+
1200
+ def wait_for_go_or_stop_or_retry(error = nil)
1201
+ @go = false
1202
+ sleep(0.01) until @go or @stop or @retry_needed
1203
+ @go = false
1204
+ mark_running()
1205
+ Kernel.raise StopScript if @stop
1206
+ Kernel.raise error if error and !@continue_after_error
1207
+ end
1208
+
1209
+ def mark_running
1210
+ Qt.execute_in_main_thread(true) do
1211
+ @run_callback.call(self) if @run_callback
1212
+ @active_script.highlight_line
1213
+ @realtime_button_bar.state = 'Running'
1214
+ @realtime_button_bar.start_button.setText('Go')
1215
+ @realtime_button_bar.pause_button.setText('Pause')
1216
+ end
1217
+ end
1218
+
1219
+ def mark_paused
1220
+ Qt.execute_in_main_thread(true) do
1221
+ @pause_callback.call(self) if @pause_callback
1222
+ @active_script.highlight_line('lightblue')
1223
+ @realtime_button_bar.state = 'Paused'
1224
+ end
1225
+ end
1226
+
1227
+ def mark_error
1228
+ Qt.execute_in_main_thread(true) do
1229
+ @error_callback.call(self) if @error_callback
1230
+ @active_script.highlight_line('pink')
1231
+ @realtime_button_bar.state = 'Error'
1232
+ @realtime_button_bar.pause_button.setText('Retry')
1233
+ end
1234
+ end
1235
+
1236
+ def mark_stopped
1237
+ stop_message_log()
1238
+ Qt.execute_in_main_thread(true) do
1239
+ @realtime_button_bar.start_button.setText('Start')
1240
+ @realtime_button_bar.pause_button.setText('Pause')
1241
+ @realtime_button_bar.state = 'Stopped'
1242
+ @stop_callback.call(self) if @stop_callback
1243
+ end
1244
+ end
1245
+
1246
+ def mark_breakpoint
1247
+ Qt.execute_in_main_thread(true) do
1248
+ @active_script.highlight_line('tan')
1249
+ @realtime_button_bar.state = 'Breakpoint'
1250
+ end
1251
+ end
1252
+
1253
+ def run_text(text,
1254
+ line_offset = 0,
1255
+ text_binding = nil,
1256
+ close_on_complete = false)
1257
+ @run_callback.call(self) if @run_callback
1258
+ @realtime_button_bar.start_button.setEnabled(true)
1259
+ initialize_variables()
1260
+ create_tabs()
1261
+ @line_offset = line_offset
1262
+ @script.setReadOnly(true)
1263
+ @realtime_button_bar.start_button.setText(' Go ')
1264
+ @realtime_button_bar.state = 'Running'
1265
+
1266
+ saved_instance = @@instance
1267
+ saved_run_thread = @@run_thread
1268
+ @@instance = self
1269
+ @@run_thread = Thread.new do
1270
+ uncaught_exception = false
1271
+ begin
1272
+ # Capture STDOUT and STDERR
1273
+ $stdout.add_stream(@output_io)
1274
+ $stderr.add_stream(@output_io)
1275
+
1276
+ scriptrunner_puts "Starting script: #{File.basename(@filename)}" unless close_on_complete
1277
+ handle_output_io()
1278
+
1279
+ # Start Limits Monitoring
1280
+ @@limits_monitor_thread = Thread.new { limits_monitor_thread() } if @@monitor_limits and !@@limits_monitor_thread
1281
+
1282
+ # Start Output Thread
1283
+ @@output_thread = Thread.new { output_thread() } unless @@output_thread
1284
+
1285
+ # Check top level cache
1286
+ if @top_level_instrumented_cache &&
1287
+ (@top_level_instrumented_cache[1] == line_offset) &&
1288
+ (@top_level_instrumented_cache[2] == @filename) &&
1289
+ (@top_level_instrumented_cache[0] == text)
1290
+ # Use the instrumented cache
1291
+ instrumented_script = @top_level_instrumented_cache[3]
1292
+ else
1293
+ # Instrument the script
1294
+ if text_binding
1295
+ instrumented_script = self.class.instrument_script(text, @filename, false)
1296
+ else
1297
+ instrumented_script = self.class.instrument_script(text, @filename, true)
1298
+ end
1299
+ @top_level_instrumented_cache = [text, line_offset, @filename, instrumented_script]
1300
+ end
1301
+
1302
+ # Execute the script with warnings disabled
1303
+ Cosmos.disable_warnings do
1304
+ @pre_line_time = Time.now.sys
1305
+ Cosmos.set_working_dir do
1306
+ if text_binding
1307
+ eval(instrumented_script, text_binding, @filename, 1)
1308
+ else
1309
+ Object.class_eval(instrumented_script, @filename, 1)
1310
+ end
1311
+ end
1312
+ end
1313
+
1314
+ scriptrunner_puts "Script completed: #{File.basename(@filename)}" unless close_on_complete
1315
+ handle_output_io()
1316
+
1317
+ rescue Exception => error
1318
+ if error.class == StopScript or error.class == SkipTestCase
1319
+ scriptrunner_puts "Script stopped: #{File.basename(@filename)}"
1320
+ handle_output_io()
1321
+ else
1322
+ uncaught_exception = true
1323
+ filename, line_number = error.source
1324
+ handle_exception(error, true, filename, line_number)
1325
+ scriptrunner_puts "Exception in Control Statement - Script stopped: #{File.basename(@filename)}"
1326
+ handle_output_io()
1327
+ Qt.execute_in_main_thread(true) { @script.highlight_line('red') }
1328
+ end
1329
+ ensure
1330
+ # Change Go Button to Start Button and remove highlight
1331
+ Qt.execute_in_main_thread(true) do
1332
+ # Stop Capturing STDOUT and STDERR
1333
+ # Check for remove_stream because if the tool is quitting the
1334
+ # Cosmos::restore_io may have been called which sets $stdout and
1335
+ # $stderr to the IO constant
1336
+ $stdout.remove_stream(@output_io) if $stdout.respond_to? :remove_stream
1337
+ $stderr.remove_stream(@output_io) if $stderr.respond_to? :remove_stream
1338
+
1339
+ # Clear run thread and instance to indicate we are no longer running
1340
+ @@instance = saved_instance
1341
+ @@run_thread = saved_run_thread
1342
+ @active_script = @script
1343
+ @script_binding = nil
1344
+ @current_filename = nil
1345
+ @current_line_number = 0
1346
+ if @@limits_monitor_thread and not @@instance
1347
+ @@cancel_limits = true
1348
+ @@limits_sleeper.cancel
1349
+ Qt::CoreApplication.processEvents()
1350
+ Cosmos.kill_thread(self, @@limits_monitor_thread)
1351
+ @@limits_monitor_thread = nil
1352
+ end
1353
+ if @@output_thread and not @@instance
1354
+ @@cancel_output = true
1355
+ @@output_sleeper.cancel
1356
+ Qt::CoreApplication.processEvents()
1357
+ Cosmos.kill_thread(self, @@output_thread)
1358
+ @@output_thread = nil
1359
+ end
1360
+
1361
+ @script.setReadOnly(false)
1362
+ @script.stop_highlight unless uncaught_exception
1363
+ select_tab_and_destroy_tabs_after_index(0)
1364
+ remove_tabs()
1365
+ unless @allow_start
1366
+ @realtime_button_bar.start_button.setEnabled(false)
1367
+ @script.setReadOnly(true)
1368
+ end
1369
+ mark_stopped()
1370
+ if close_on_complete
1371
+ self.parent.done(0)
1372
+ end
1373
+ end
1374
+ end
1375
+ end
1376
+ end
1377
+
1378
+ def handle_potential_tab_change(filename)
1379
+ # Make sure the correct file is shown in script runner
1380
+ if @current_file != filename and @tab_book_shown
1381
+ Qt.execute_in_main_thread(true) do
1382
+ if @call_stack.include?(filename)
1383
+ index = @call_stack.index(filename)
1384
+ select_tab_and_destroy_tabs_after_index(index)
1385
+ else # new file
1386
+ # Create new tab
1387
+ new_script = create_ruby_editor()
1388
+ new_script.filename = filename
1389
+ @tab_book.addTab(new_script, ' ' + File.basename(filename) + ' ')
1390
+
1391
+ @call_stack.push(filename.dup)
1392
+
1393
+ # Switch to new tab
1394
+ @tab_book.setCurrentIndex(@tab_book.count - 1)
1395
+ @active_script = new_script
1396
+ load_file_into_script(filename)
1397
+ new_script.setReadOnly(true)
1398
+ end
1399
+
1400
+ @current_file = filename
1401
+ end
1402
+ end
1403
+ end
1404
+
1405
+ def show_active_tab
1406
+ @tab_book.setCurrentIndex(@call_stack.length - 1) if @tab_book_shown
1407
+ end
1408
+
1409
+ def handle_pause(filename, line_number)
1410
+ bkpt_filename = ''
1411
+ Qt.execute_in_main_thread(true) {bkpt_filename = @active_script.filename}
1412
+ breakpoint = false
1413
+ breakpoint = true if @@breakpoints[bkpt_filename] and @@breakpoints[bkpt_filename][line_number]
1414
+
1415
+ filename = File.basename(filename)
1416
+ if @pause
1417
+ @pause = false unless @@step_mode
1418
+ if breakpoint
1419
+ perform_breakpoint(filename, line_number)
1420
+ else
1421
+ perform_pause()
1422
+ end
1423
+ else
1424
+ perform_breakpoint(filename, line_number) if breakpoint
1425
+ end
1426
+ end
1427
+
1428
+ def handle_line_delay
1429
+ if @@line_delay > 0.0
1430
+ sleep_time = @@line_delay - (Time.now.sys - @pre_line_time)
1431
+ sleep(sleep_time) if sleep_time > 0.0
1432
+ end
1433
+ @pre_line_time = Time.now.sys
1434
+ end
1435
+
1436
+ def continue_without_pausing_on_errors?
1437
+ if !@@pause_on_error
1438
+ if Qt::MessageBox.warning(self, "Warning", "If an error occurs, the script will not pause and will run to completion. Continue?", Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::Yes) == Qt::MessageBox::No
1439
+ return false
1440
+ end
1441
+ end
1442
+ true
1443
+ end
1444
+
1445
+ def handle_start_go_button
1446
+ scriptrunner_puts "User pressed #{@realtime_button_bar.start_button.text.strip}"
1447
+ handle_output_io()
1448
+ @realtime_button_bar.start_button.clear_focus()
1449
+
1450
+ if running?()
1451
+ show_active_tab()
1452
+ go()
1453
+ else
1454
+ if @allow_start
1455
+ run() if continue_without_pausing_on_errors?()
1456
+ end
1457
+ end
1458
+ end
1459
+
1460
+ def handle_pause_retry_button
1461
+ scriptrunner_puts "User pressed #{@realtime_button_bar.pause_button.text.strip}"
1462
+ handle_output_io()
1463
+ @realtime_button_bar.pause_button.clear_focus()
1464
+ show_active_tab() if running?
1465
+ if @realtime_button_bar.pause_button.text.to_s == 'Pause'
1466
+ pause()
1467
+ else
1468
+ retry_needed()
1469
+ end
1470
+ end
1471
+
1472
+ def handle_stop_button
1473
+ scriptrunner_puts "User pressed #{@realtime_button_bar.stop_button.text.strip}"
1474
+ handle_output_io()
1475
+ @realtime_button_bar.stop_button.clear_focus()
1476
+
1477
+ if @stop
1478
+ # If we're already stopped and they click Stop again, kill the run
1479
+ # thread. This will break any ruby sleeps or other code blocks.
1480
+ ScriptRunnerFrame.stop!
1481
+ handle_output_io()
1482
+ else
1483
+ @stop = true
1484
+ end
1485
+ if !running?()
1486
+ # Stop highlight if there was a red syntax error
1487
+ @script.stop_highlight
1488
+ end
1489
+ end
1490
+
1491
+ def handle_exception(error, fatal, filename = nil, line_number = 0)
1492
+ @error_callback.call(self) if @error_callback
1493
+
1494
+ @exceptions ||= []
1495
+ @exceptions << error
1496
+ @@error = error
1497
+
1498
+ if error.class == DRb::DRbConnError
1499
+ Logger.error("Error Connecting to Command and Telemetry Server")
1500
+ elsif error.class == CheckError
1501
+ Logger.error(error.message)
1502
+ else
1503
+ Logger.error(error.class.to_s.split('::')[-1] + ' : ' + error.message)
1504
+ end
1505
+ Logger.error(error.backtrace.join("\n")) if @@show_backtrace
1506
+ handle_output_io(filename, line_number)
1507
+
1508
+ Kernel.raise error if !@@pause_on_error and !@continue_after_error and !fatal
1509
+
1510
+ if !fatal and @@pause_on_error
1511
+ mark_error()
1512
+ wait_for_go_or_stop_or_retry(error)
1513
+ end
1514
+
1515
+ if @retry_needed
1516
+ @retry_needed = false
1517
+ true
1518
+ else
1519
+ false
1520
+ end
1521
+ end
1522
+
1523
+ # Right click context_menu for the script
1524
+ def context_menu(point)
1525
+ # Only show context menu if not running or paused. Otherwise will segfault if current tab goes away while menu
1526
+ # is shown
1527
+ if not self.class.running? or (running?() and @realtime_button_bar.state != 'Running')
1528
+ if @tab_book_shown
1529
+ current_script = @tab_book.widget(@tab_book.currentIndex)
1530
+ else
1531
+ current_script = @script
1532
+ end
1533
+ menu = current_script.context_menu(point)
1534
+ menu.addSeparator()
1535
+ if not self.class.running?
1536
+ exec_selected_action = Qt::Action.new(tr("Execute Selected Lines"), self)
1537
+ exec_selected_action.statusTip = tr("Execute the selected lines as a standalone script")
1538
+ exec_selected_action.connect(SIGNAL('triggered()')) { run_selection() }
1539
+ menu.addAction(exec_selected_action)
1540
+
1541
+ exec_cursor_action = Qt::Action.new(tr("Execute From Cursor"), self)
1542
+ exec_cursor_action.statusTip = tr("Execute the script starting at the line containing the cursor")
1543
+ exec_cursor_action.connect(SIGNAL('triggered()')) { run_from_cursor() }
1544
+ menu.addAction(exec_cursor_action)
1545
+
1546
+ menu.addSeparator()
1547
+
1548
+ if RUBY_VERSION.split('.')[0].to_i > 1
1549
+ syntax_action = Qt::Action.new(tr("Ruby Syntax Check Selected Lines"), self)
1550
+ syntax_action.statusTip = tr("Check the selected lines for valid Ruby syntax")
1551
+ syntax_action.connect(SIGNAL('triggered()')) { ruby_syntax_check_selection() }
1552
+ menu.addAction(syntax_action)
1553
+ end
1554
+
1555
+ mnemonic_action = Qt::Action.new(tr("Mnemonic Check Selected Lines"), self)
1556
+ mnemonic_action.statusTip = tr("Check the selected lines for valid targets, packets, mnemonics and parameters")
1557
+ mnemonic_action.connect(SIGNAL('triggered()')) { mnemonic_check_selection() }
1558
+ menu.addAction(mnemonic_action)
1559
+
1560
+ elsif running?() and @realtime_button_bar.state != 'Running'
1561
+ exec_selected_action = Qt::Action.new(tr("Execute Selected Lines While Paused"), self)
1562
+ exec_selected_action.statusTip = tr("Execute the selected lines as a standalone script")
1563
+ exec_selected_action.connect(SIGNAL('triggered()')) { run_selection_while_paused() }
1564
+ menu.addAction(exec_selected_action)
1565
+ end
1566
+ menu.exec(current_script.mapToGlobal(point))
1567
+ menu.dispose
1568
+ end
1569
+ end
1570
+
1571
+ def load_file_into_script(filename)
1572
+ cached = @@file_cache[filename]
1573
+ if cached
1574
+ @active_script.setPlainText(cached.gsub("\r", ''))
1575
+ else
1576
+ @active_script.setPlainText(File.read(filename).gsub("\r", ''))
1577
+ end
1578
+ mark_breakpoints(filename)
1579
+
1580
+ @active_script.stop_highlight
1581
+ end
1582
+
1583
+ def mark_breakpoints(filename)
1584
+ breakpoints = @@breakpoints[filename]
1585
+ if breakpoints
1586
+ breakpoints.each do |line_number, present|
1587
+ @active_script.add_breakpoint(line_number) if present
1588
+ end
1589
+ end
1590
+ end
1591
+
1592
+ def redirect_io
1593
+ # Redirect Standard Output and Standard Error
1594
+ $stdout = Stdout.instance
1595
+ $stderr = Stderr.instance
1596
+
1597
+ # Disable outputting to default io file descriptors
1598
+ $stdout.remove_default_io
1599
+ $stderr.remove_default_io
1600
+
1601
+ Logger.level = Logger::INFO
1602
+ Logger::INFO_SEVERITY_STRING.replace('')
1603
+ Logger::WARN_SEVERITY_STRING.replace('<Y> WARN:')
1604
+ Logger::ERROR_SEVERITY_STRING.replace('<R> ERROR:')
1605
+ end
1606
+
1607
+ def create_tabs
1608
+ tab_text = @default_tab_text
1609
+ tab_text = ' ' + File.basename(@filename) + ' ' unless @filename.empty?
1610
+ @tab_book.addTab(@script, tab_text)
1611
+ @top_frame.insertWidget(0, @tab_book)
1612
+ @tab_book_shown = true
1613
+ end
1614
+
1615
+ def remove_tabs
1616
+ @top_frame.takeAt(0) # Remove the @tab_book from the layout
1617
+ @top_frame.addWidget(@script) # Add back the script
1618
+ @script.show
1619
+ @tab_book_shown = false
1620
+ end
1621
+
1622
+ def isolate_string(keyword, line)
1623
+ found_string = nil
1624
+
1625
+ # Find keyword
1626
+ keyword_index = line.index(keyword)
1627
+
1628
+ # Remove keyword from line
1629
+ line = line[(keyword_index + keyword.length)..-1]
1630
+
1631
+ # Find start parens
1632
+ start_parens = line.index('(')
1633
+ if start_parens
1634
+ end_parens = line[start_parens..-1].index(')')
1635
+ found_string = line[(start_parens + 1)..(end_parens + start_parens - 1)].remove_quotes if end_parens
1636
+ if keyword == 'wait' or keyword == 'wait_check'
1637
+ quote_index = found_string.rindex('"')
1638
+ quote_index = found_string.rindex("'") unless quote_index
1639
+ if quote_index
1640
+ found_string = found_string[0..quote_index].remove_quotes
1641
+ else
1642
+ found_string = nil
1643
+ end
1644
+ end
1645
+ end
1646
+ found_string
1647
+ end
1648
+
1649
+ def mnemonic_check_cmd_line(keyword, line_number, line)
1650
+ result = nil
1651
+
1652
+ # Isolate the string
1653
+ string = isolate_string(keyword, line)
1654
+ if string
1655
+ begin
1656
+ target_name, cmd_name, cmd_params = extract_fields_from_cmd_text(string)
1657
+ result = "At line #{line_number}: Unknown command: #{target_name} #{cmd_name}"
1658
+ packet = System.commands.packet(target_name, cmd_name)
1659
+ Kernel.raise "Command not found" unless packet
1660
+ cmd_params.each do |param_name, param_value|
1661
+ result = "At line #{line_number}: Unknown command parameter: #{target_name} #{cmd_name} #{param_name}"
1662
+ packet.get_item(param_name)
1663
+ end
1664
+ result = nil
1665
+ rescue
1666
+ if result
1667
+ if string.index('=>')
1668
+ # Assume alternative syntax
1669
+ result = nil
1670
+ end
1671
+ else
1672
+ result = "At line #{line_number}: Potentially malformed command: #{line}"
1673
+ end
1674
+ end
1675
+ end
1676
+
1677
+ result
1678
+ end
1679
+
1680
+ def _mnemonic_check_tlm_line(keyword, line_number, line)
1681
+ result = nil
1682
+
1683
+ # Isolate the string
1684
+ string = isolate_string(keyword, line)
1685
+ if string
1686
+ begin
1687
+ target_name, packet_name, item_name = yield string
1688
+ result = "At line #{line_number}: Unknown telemetry item: #{target_name} #{packet_name} #{item_name}"
1689
+ System.telemetry.packet_and_item(target_name, packet_name, item_name)
1690
+ result = nil
1691
+ rescue
1692
+ if result
1693
+ if string.index(',')
1694
+ # Assume alternative syntax
1695
+ result = nil
1696
+ end
1697
+ else
1698
+ result = "At line #{line_number}: Potentially malformed telemetry: #{line}"
1699
+ end
1700
+ end
1701
+ end
1702
+
1703
+ result
1704
+ end
1705
+
1706
+ def mnemonic_check_tlm_line(keyword, line_number, line)
1707
+ _mnemonic_check_tlm_line(keyword, line_number, line) do |string|
1708
+ extract_fields_from_tlm_text(string)
1709
+ end
1710
+ end
1711
+
1712
+ def mnemonic_check_set_tlm_line(keyword, line_number, line)
1713
+ _mnemonic_check_tlm_line(keyword, line_number, line) do |string|
1714
+ extract_fields_from_set_tlm_text(string)
1715
+ end
1716
+ end
1717
+
1718
+ def mnemonic_check_check_line(keyword, line_number, line)
1719
+ _mnemonic_check_tlm_line(keyword, line_number, line) do |string|
1720
+ extract_fields_from_check_text(string)
1721
+ end
1722
+ end
1723
+
1724
+ def output_thread
1725
+ @@cancel_output = false
1726
+ @@output_sleeper = Sleeper.new
1727
+ begin
1728
+ loop do
1729
+ break if @@cancel_output
1730
+ handle_output_io() if (Time.now.sys - @output_time) > 5.0
1731
+ break if @@cancel_output
1732
+ break if @@output_sleeper.sleep(1.0)
1733
+ end # loop
1734
+ rescue => error
1735
+ Qt.execute_in_main_thread(true) do
1736
+ ExceptionDialog.new(self, error, "Output Thread")
1737
+ end
1738
+ end
1739
+ end
1740
+
1741
+ def limits_monitor_thread
1742
+ @@cancel_limits = false
1743
+ @@limits_sleeper = Sleeper.new
1744
+ queue_id = nil
1745
+ begin
1746
+ loop do
1747
+ break if @@cancel_limits
1748
+ begin
1749
+ # Subscribe to limits notifications
1750
+ queue_id = subscribe_limits_events(100000) unless queue_id
1751
+
1752
+ # Get the next limits event
1753
+ break if @@cancel_limits
1754
+ begin
1755
+ type, data = get_limits_event(queue_id, true)
1756
+ rescue ThreadError
1757
+ break if @@cancel_limits
1758
+ break if @@limits_sleeper.sleep(0.5)
1759
+ next
1760
+ end
1761
+
1762
+ break if @@cancel_limits
1763
+
1764
+ # Display limits state changes
1765
+ if type == :LIMITS_CHANGE
1766
+ target_name = data[0]
1767
+ packet_name = data[1]
1768
+ item_name = data[2]
1769
+ old_limits_state = data[3]
1770
+ new_limits_state = data[4]
1771
+
1772
+ if old_limits_state == nil # Changing from nil
1773
+ if (new_limits_state != :GREEN) &&
1774
+ (new_limits_state != :GREEN_LOW) &&
1775
+ (new_limits_state != :GREEN_HIGH) &&
1776
+ (new_limits_state != :BLUE)
1777
+ msg = "#{target_name} #{packet_name} #{item_name} is #{new_limits_state.to_s}"
1778
+ case new_limits_state
1779
+ when :YELLOW, :YELLOW_LOW, :YELLOW_HIGH
1780
+ scriptrunner_puts "<Y>#{msg}"
1781
+ when :RED, :RED_LOW, :RED_HIGH
1782
+ scriptrunner_puts "<R>#{msg}"
1783
+ else
1784
+ # Print nothing
1785
+ end
1786
+ handle_output_io()
1787
+ end
1788
+ else # changing from a color
1789
+ msg = "#{target_name} #{packet_name} #{item_name} is #{new_limits_state.to_s}"
1790
+ case new_limits_state
1791
+ when :BLUE
1792
+ scriptrunner_puts "<B>#{msg}"
1793
+ when :GREEN, :GREEN_LOW, :GREEN_HIGH
1794
+ scriptrunner_puts "<G>#{msg}"
1795
+ when :YELLOW, :YELLOW_LOW, :YELLOW_HIGH
1796
+ scriptrunner_puts "<Y>#{msg}"
1797
+ when :RED, :RED_LOW, :RED_HIGH
1798
+ scriptrunner_puts "<R>#{msg}"
1799
+ else
1800
+ # Print nothing
1801
+ end
1802
+ break if @@cancel_limits
1803
+ handle_output_io()
1804
+ break if @@cancel_limits
1805
+ end
1806
+
1807
+ if @@pause_on_red && (new_limits_state == :RED ||
1808
+ new_limits_state == :RED_LOW ||
1809
+ new_limits_state == :RED_HIGH)
1810
+ break if @@cancel_limits
1811
+ pause()
1812
+ break if @@cancel_limits
1813
+ end
1814
+ end
1815
+
1816
+ rescue DRb::DRbConnError
1817
+ queue_id = nil
1818
+ break if @@cancel_limits
1819
+ break if @@limits_sleeper.sleep(1)
1820
+ end
1821
+
1822
+ end # loop
1823
+ rescue => error
1824
+ Qt.execute_in_main_thread(true) do
1825
+ ExceptionDialog.new(self, error, "Limits Monitor Thread")
1826
+ end
1827
+ end
1828
+ ensure
1829
+ begin
1830
+ unsubscribe_limits_events(queue_id) if queue_id
1831
+ rescue
1832
+ # Oh Well
1833
+ end
1834
+ end
1835
+
1836
+ end # class ScriptRunnerFrame
1837
+
1838
+ end # module Cosmos