cosmos 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (912) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +48 -48
  4. data/.travis.yml +7 -7
  5. data/CONTRIBUTING.txt +50 -50
  6. data/Gemfile +6 -6
  7. data/Guardfile +27 -27
  8. data/LICENSE.txt +879 -879
  9. data/Manifest.txt +1116 -1114
  10. data/README.md +109 -107
  11. data/Rakefile +214 -214
  12. data/autohotkey/config/data/diamond.STL +57 -57
  13. data/autohotkey/config/system/system.txt +34 -34
  14. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  17. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  18. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  20. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  21. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  22. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -294
  23. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  24. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  25. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  26. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  27. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  28. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  29. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  30. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  31. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  32. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  33. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  34. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  37. data/autohotkey/config/targets/INST/target.txt +26 -26
  38. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  40. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  41. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  42. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  43. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  44. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  45. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  46. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  47. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  48. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  49. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  50. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  51. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  52. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  55. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  57. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  58. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  59. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  60. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  61. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  62. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  63. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  64. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  65. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  66. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  67. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  69. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  70. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  71. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  72. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  75. data/autohotkey/lib/example_background_task.rb +42 -42
  76. data/autohotkey/lib/user_version.rb +3 -3
  77. data/autohotkey/procedures/clear_util.rb +7 -7
  78. data/autohotkey/procedures/collect.rb +18 -18
  79. data/autohotkey/procedures/collect_util.rb +14 -14
  80. data/autohotkey/procedures/example_test.rb +67 -67
  81. data/autohotkey/procedures/example_test2.rb +74 -74
  82. data/autohotkey/procedures/script_test.rb +17 -17
  83. data/autohotkey/procedures/syntax_error.rb +18 -18
  84. data/autohotkey/tools/CmdExtractorAHK +16 -16
  85. data/autohotkey/tools/CmdSender +14 -14
  86. data/autohotkey/tools/CmdSenderAHK +18 -18
  87. data/autohotkey/tools/CmdTlmServer +14 -14
  88. data/autohotkey/tools/CmdTlmServerAHK +28 -28
  89. data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
  90. data/autohotkey/tools/DataViewer +14 -14
  91. data/autohotkey/tools/DataViewerAHK +17 -17
  92. data/autohotkey/tools/HandbookCreatorAHK +20 -20
  93. data/autohotkey/tools/LauncherAHK +17 -17
  94. data/autohotkey/tools/LimitsMonitorAHK +20 -20
  95. data/autohotkey/tools/OpenGLBuilderAHK +20 -20
  96. data/autohotkey/tools/PacketViewer +14 -14
  97. data/autohotkey/tools/PacketViewerAHK +18 -18
  98. data/autohotkey/tools/PacketViewerAHK2 +17 -17
  99. data/autohotkey/tools/Replay +14 -14
  100. data/autohotkey/tools/Replay.bat +59 -59
  101. data/autohotkey/tools/ReplayAHK +17 -17
  102. data/autohotkey/tools/ScriptRunner +14 -14
  103. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  104. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  105. data/autohotkey/tools/TableManager +14 -14
  106. data/autohotkey/tools/TableManagerAHK +30 -30
  107. data/autohotkey/tools/TestRunner +15 -15
  108. data/autohotkey/tools/TestRunnerAHK +17 -17
  109. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  112. data/autohotkey/tools/TlmExtractor +15 -15
  113. data/autohotkey/tools/TlmExtractorAHK +19 -19
  114. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  115. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  116. data/autohotkey/tools/TlmGrapher +14 -14
  117. data/autohotkey/tools/TlmGrapherAHK +19 -19
  118. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  119. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  120. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  121. data/autohotkey/tools/TlmViewer +14 -14
  122. data/autohotkey/tools/TlmViewerAHK +28 -28
  123. data/autohotkey/tools/TlmViewerAHK2 +18 -18
  124. data/autohotkey/tools/TlmViewerAHK3 +18 -18
  125. data/autohotkey/tools/TlmViewerAHK4 +18 -18
  126. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  127. data/autohotkey/tools/autohotkey.rb +37 -37
  128. data/autohotkey/tools/cmd_extractor.ahk +27 -27
  129. data/autohotkey/tools/cmd_sender.ahk +182 -162
  130. data/autohotkey/tools/cmd_tlm_server.ahk +89 -89
  131. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  132. data/autohotkey/tools/data_viewer.ahk +135 -135
  133. data/autohotkey/tools/handbook_creator.ahk +23 -23
  134. data/autohotkey/tools/launcher.ahk +41 -41
  135. data/autohotkey/tools/limits_monitor.ahk +70 -70
  136. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  137. data/autohotkey/tools/packet_viewer.ahk +143 -143
  138. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  139. data/autohotkey/tools/replay.ahk +98 -98
  140. data/autohotkey/tools/script_runner.ahk +589 -589
  141. data/autohotkey/tools/script_runner2.ahk +34 -31
  142. data/autohotkey/tools/table_manager.ahk +220 -220
  143. data/autohotkey/tools/test_runner.ahk +262 -259
  144. data/autohotkey/tools/test_runner2.ahk +52 -52
  145. data/autohotkey/tools/test_runner3.ahk +13 -13
  146. data/autohotkey/tools/tlm_extractor.ahk +272 -272
  147. data/autohotkey/tools/tlm_grapher.ahk +642 -642
  148. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  149. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  150. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  151. data/autohotkey/tools/tlm_viewer2.ahk +50 -49
  152. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  153. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  154. data/bin/cosmos +96 -96
  155. data/bin/cstol_converter +1166 -1166
  156. data/bin/rubysloc +85 -85
  157. data/cosmos.gemspec +98 -97
  158. data/data/about.txt +4 -4
  159. data/data/crc.txt +306 -305
  160. data/data/diamond.STL +57 -57
  161. data/data/legal.txt +9 -9
  162. data/demo/Gemfile +6 -6
  163. data/demo/Launcher +15 -15
  164. data/demo/Launcher.bat +59 -59
  165. data/demo/Rakefile +61 -61
  166. data/demo/config/data/crc.txt +222 -206
  167. data/demo/config/data/diamond.STL +57 -57
  168. data/demo/config/data/meta_init.txt +4 -4
  169. data/demo/config/system/system.txt +34 -34
  170. data/demo/config/system/system2.txt +33 -33
  171. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  172. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  173. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  174. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  175. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  176. data/demo/config/targets/COSMOS/target.txt +11 -11
  177. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  178. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -3
  179. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  180. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  181. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  182. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  183. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  184. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  185. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  186. data/demo/config/targets/INST/lib/sim_inst.rb +305 -294
  187. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  188. data/demo/config/targets/INST/screens/array.txt +15 -15
  189. data/demo/config/targets/INST/screens/block.txt +8 -8
  190. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  191. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  192. data/demo/config/targets/INST/screens/ground.txt +25 -25
  193. data/demo/config/targets/INST/screens/hs.txt +44 -44
  194. data/demo/config/targets/INST/screens/latest.txt +23 -23
  195. data/demo/config/targets/INST/screens/other.txt +29 -29
  196. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  197. data/demo/config/targets/INST/target.txt +33 -33
  198. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  199. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  200. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  201. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  202. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  203. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -12
  204. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  205. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  206. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +54 -48
  207. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  208. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -33
  209. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -29
  210. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  211. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  212. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  213. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  214. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  215. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  216. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  217. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  218. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  219. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  220. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  221. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  222. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  223. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  224. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  225. data/demo/config/tools/launcher/launcher.txt +45 -45
  226. data/demo/config/tools/launcher/launcher2.txt +45 -45
  227. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  228. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  229. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  230. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  231. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  232. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  233. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  234. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  235. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  236. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  237. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  238. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  239. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  240. data/demo/lib/example_background_task.rb +57 -52
  241. data/demo/lib/example_target.rb +113 -108
  242. data/demo/lib/scpi_target.rb +74 -74
  243. data/demo/lib/user_version.rb +3 -3
  244. data/demo/procedures/checks.rb +11 -11
  245. data/demo/procedures/clear_util.rb +7 -7
  246. data/demo/procedures/collect.rb +18 -18
  247. data/demo/procedures/collect_util.rb +14 -14
  248. data/demo/procedures/cosmos_api_test.rb +293 -293
  249. data/demo/procedures/disconnect.rb +29 -29
  250. data/demo/procedures/example_test.rb +182 -182
  251. data/demo/procedures/plot_test.rb +8 -8
  252. data/demo/procedures/run_example_test.rb +3 -3
  253. data/demo/procedures/test.rb +51 -51
  254. data/demo/tools/CmdExtractor +15 -15
  255. data/demo/tools/CmdExtractor.bat +59 -59
  256. data/demo/tools/CmdSender +15 -15
  257. data/demo/tools/CmdSender.bat +59 -59
  258. data/demo/tools/CmdTlmServer +15 -15
  259. data/demo/tools/CmdTlmServer.bat +59 -59
  260. data/demo/tools/DataViewer +15 -15
  261. data/demo/tools/DataViewer.bat +59 -59
  262. data/demo/tools/ExampleTarget +15 -15
  263. data/demo/tools/ExampleTarget.bat +59 -59
  264. data/demo/tools/HandbookCreator +15 -15
  265. data/demo/tools/HandbookCreator.bat +61 -61
  266. data/demo/tools/Launcher +15 -15
  267. data/demo/tools/Launcher.bat +59 -59
  268. data/demo/tools/LimitsMonitor +15 -15
  269. data/demo/tools/LimitsMonitor.bat +59 -59
  270. data/demo/tools/OpenGLBuilder +15 -15
  271. data/demo/tools/OpenGLBuilder.bat +59 -59
  272. data/demo/tools/PacketViewer +15 -15
  273. data/demo/tools/PacketViewer.bat +59 -59
  274. data/demo/tools/Replay +15 -15
  275. data/demo/tools/Replay.bat +59 -59
  276. data/demo/tools/ScpiTarget +15 -15
  277. data/demo/tools/ScpiTarget.bat +59 -59
  278. data/demo/tools/ScriptRunner +15 -15
  279. data/demo/tools/ScriptRunner.bat +59 -59
  280. data/demo/tools/TableManager +15 -15
  281. data/demo/tools/TableManager.bat +59 -59
  282. data/demo/tools/TestRunner +15 -15
  283. data/demo/tools/TestRunner.bat +59 -59
  284. data/demo/tools/TlmExtractor +15 -15
  285. data/demo/tools/TlmExtractor.bat +59 -59
  286. data/demo/tools/TlmGrapher +15 -15
  287. data/demo/tools/TlmGrapher.bat +59 -59
  288. data/demo/tools/TlmViewer +15 -15
  289. data/demo/tools/TlmViewer.bat +59 -59
  290. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  291. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  292. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  293. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  294. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  295. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  296. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  297. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  298. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  299. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  300. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  301. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  302. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  304. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  305. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  306. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  307. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  308. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  309. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  310. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  311. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  312. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  313. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  314. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  316. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  317. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  318. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  319. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  320. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  321. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  322. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  323. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  324. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  325. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  326. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  328. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  329. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  330. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  331. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  332. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  333. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  334. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  335. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  336. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  337. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  338. data/ext/cosmos/ext/array/array.c +111 -111
  339. data/ext/cosmos/ext/array/extconf.rb +13 -13
  340. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  341. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  342. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  343. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  344. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  345. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  346. data/ext/cosmos/ext/crc/crc.c +341 -341
  347. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  348. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  349. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  350. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  351. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -261
  352. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  353. data/ext/cosmos/ext/packet/packet.c +339 -339
  354. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  355. data/ext/cosmos/ext/platform/platform.c +81 -81
  356. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  357. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  358. data/ext/cosmos/ext/string/extconf.rb +13 -13
  359. data/ext/cosmos/ext/string/string.c +49 -49
  360. data/ext/cosmos/ext/structure/structure.c +894 -894
  361. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  362. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  363. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  364. data/ext/cosmos/ext/telemetry/telemetry.c +306 -306
  365. data/ext/mkrf_conf.rb +40 -40
  366. data/install/Gemfile +6 -6
  367. data/install/Launcher +14 -14
  368. data/install/Launcher.bat +59 -59
  369. data/install/Rakefile +61 -61
  370. data/install/config/data/crc.txt +134 -133
  371. data/install/config/system/system.txt +29 -29
  372. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  373. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  374. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  375. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  376. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  377. data/install/config/targets/COSMOS/target.txt +8 -8
  378. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  379. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  380. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  381. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  382. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  383. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  384. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  385. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  386. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  387. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  388. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  389. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  390. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  391. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  392. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  393. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  394. data/install/config/tools/launcher/launcher.txt +39 -39
  395. data/install/config/tools/script_runner/script_runner.txt +3 -3
  396. data/install/config/tools/test_runner/test_runner.txt +8 -8
  397. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  398. data/install/lib/user_version.rb +3 -3
  399. data/install/tools/CmdExtractor +15 -15
  400. data/install/tools/CmdExtractor.bat +59 -59
  401. data/install/tools/CmdSender +15 -15
  402. data/install/tools/CmdSender.bat +59 -59
  403. data/install/tools/CmdTlmServer +15 -15
  404. data/install/tools/CmdTlmServer.bat +59 -59
  405. data/install/tools/DataViewer +15 -15
  406. data/install/tools/DataViewer.bat +59 -59
  407. data/install/tools/HandbookCreator +15 -15
  408. data/install/tools/HandbookCreator.bat +61 -61
  409. data/install/tools/Launcher +15 -15
  410. data/install/tools/Launcher.bat +59 -59
  411. data/install/tools/LimitsMonitor +15 -15
  412. data/install/tools/LimitsMonitor.bat +59 -59
  413. data/install/tools/OpenGLBuilder +15 -15
  414. data/install/tools/OpenGLBuilder.bat +59 -59
  415. data/install/tools/PacketViewer +15 -15
  416. data/install/tools/PacketViewer.bat +59 -59
  417. data/install/tools/Replay +15 -15
  418. data/install/tools/Replay.bat +59 -59
  419. data/install/tools/ScriptRunner +15 -15
  420. data/install/tools/ScriptRunner.bat +59 -59
  421. data/install/tools/TableManager +15 -15
  422. data/install/tools/TableManager.bat +59 -59
  423. data/install/tools/TestRunner +15 -15
  424. data/install/tools/TestRunner.bat +59 -59
  425. data/install/tools/TlmExtractor +15 -15
  426. data/install/tools/TlmExtractor.bat +59 -59
  427. data/install/tools/TlmGrapher +15 -15
  428. data/install/tools/TlmGrapher.bat +59 -59
  429. data/install/tools/TlmViewer +15 -15
  430. data/install/tools/TlmViewer.bat +59 -59
  431. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  432. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  433. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  434. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  435. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  436. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  437. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  438. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  439. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  440. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  441. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  442. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  443. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  444. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  445. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  446. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  447. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  448. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  449. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  450. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  451. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  452. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  453. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  454. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  455. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  456. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  457. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  458. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  459. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  460. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  461. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  463. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  464. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  465. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  466. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  467. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  468. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  469. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  470. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  471. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  472. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  473. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  475. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  476. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  477. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  478. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  479. data/lib/cosmos.rb +63 -63
  480. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  481. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  482. data/lib/cosmos/config/config_parser.rb +324 -324
  483. data/lib/cosmos/conversions.rb +13 -13
  484. data/lib/cosmos/conversions/conversion.rb +47 -47
  485. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  486. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  487. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  488. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  489. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  490. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  491. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  492. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  493. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  494. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  495. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  496. data/lib/cosmos/core_ext.rb +18 -18
  497. data/lib/cosmos/core_ext/array.rb +354 -354
  498. data/lib/cosmos/core_ext/class.rb +51 -51
  499. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  500. data/lib/cosmos/core_ext/exception.rb +52 -52
  501. data/lib/cosmos/core_ext/file.rb +75 -75
  502. data/lib/cosmos/core_ext/hash.rb +28 -28
  503. data/lib/cosmos/core_ext/io.rb +75 -75
  504. data/lib/cosmos/core_ext/kernel.rb +38 -38
  505. data/lib/cosmos/core_ext/math.rb +119 -119
  506. data/lib/cosmos/core_ext/matrix.rb +146 -146
  507. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  508. data/lib/cosmos/core_ext/range.rb +22 -22
  509. data/lib/cosmos/core_ext/socket.rb +32 -32
  510. data/lib/cosmos/core_ext/string.rb +310 -310
  511. data/lib/cosmos/core_ext/stringio.rb +24 -24
  512. data/lib/cosmos/core_ext/time.rb +446 -446
  513. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  514. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  515. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  516. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  517. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  518. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -317
  519. data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -128
  520. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  521. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  522. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  523. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  524. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  525. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  526. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -196
  527. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -168
  528. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  529. data/lib/cosmos/gui/dialogs/progress_dialog.rb +270 -262
  530. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -161
  531. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  532. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  533. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  534. data/lib/cosmos/gui/dialogs/splash.rb +113 -113
  535. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  536. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  537. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  538. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  539. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -494
  540. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  541. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -460
  542. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  543. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  544. data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -459
  545. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  546. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  547. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  548. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  549. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  550. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  551. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -712
  552. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  553. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  554. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  555. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  556. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  557. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  558. data/lib/cosmos/gui/qt.rb +813 -786
  559. data/lib/cosmos/gui/qt_tool.rb +378 -373
  560. data/lib/cosmos/gui/text/completion.rb +381 -381
  561. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  562. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  563. data/lib/cosmos/gui/text/ruby_editor.rb +395 -395
  564. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  565. data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -203
  566. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  567. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  568. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  569. data/lib/cosmos/interfaces.rb +11 -11
  570. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -149
  571. data/lib/cosmos/interfaces/interface.rb +213 -213
  572. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  573. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  574. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -128
  575. data/lib/cosmos/interfaces/stream_interface.rb +156 -156
  576. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  577. data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -154
  578. data/lib/cosmos/interfaces/udp_interface.rb +173 -173
  579. data/lib/cosmos/io/buffered_file.rb +11 -11
  580. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  581. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  582. data/lib/cosmos/io/json_drb.rb +344 -320
  583. data/lib/cosmos/io/json_drb_object.rb +137 -137
  584. data/lib/cosmos/io/json_rpc.rb +365 -365
  585. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  586. data/lib/cosmos/io/raw_logger.rb +174 -174
  587. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  588. data/lib/cosmos/io/serial_driver.rb +85 -85
  589. data/lib/cosmos/io/stderr.rb +36 -36
  590. data/lib/cosmos/io/stdout.rb +36 -36
  591. data/lib/cosmos/io/tcpip_server.rb +583 -532
  592. data/lib/cosmos/io/udp_sockets.rb +152 -152
  593. data/lib/cosmos/io/win32_serial_driver.rb +147 -147
  594. data/lib/cosmos/packet_logs.rb +6 -6
  595. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  596. data/lib/cosmos/packet_logs/packet_log_reader.rb +441 -439
  597. data/lib/cosmos/packet_logs/packet_log_writer.rb +321 -309
  598. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  599. data/lib/cosmos/packets/binary_accessor.rb +921 -921
  600. data/lib/cosmos/packets/commands.rb +291 -291
  601. data/lib/cosmos/packets/limits.rb +263 -263
  602. data/lib/cosmos/packets/limits_response.rb +38 -38
  603. data/lib/cosmos/packets/packet.rb +714 -699
  604. data/lib/cosmos/packets/packet_config.rb +1034 -1034
  605. data/lib/cosmos/packets/packet_item.rb +317 -317
  606. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  607. data/lib/cosmos/packets/structure.rb +421 -386
  608. data/lib/cosmos/packets/structure_item.rb +233 -233
  609. data/lib/cosmos/packets/telemetry.rb +317 -317
  610. data/lib/cosmos/processors.rb +6 -6
  611. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  612. data/lib/cosmos/processors/processor.rb +71 -71
  613. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  614. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  615. data/lib/cosmos/script.rb +9 -9
  616. data/lib/cosmos/script/extract.rb +115 -115
  617. data/lib/cosmos/script/script.rb +1513 -1493
  618. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  619. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  620. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  621. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  622. data/lib/cosmos/streams/serial_stream.rb +152 -143
  623. data/lib/cosmos/streams/stream.rb +57 -57
  624. data/lib/cosmos/streams/stream_protocol.rb +369 -369
  625. data/lib/cosmos/streams/tcpip_client_stream.rb +77 -77
  626. data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -139
  627. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  628. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  629. data/lib/cosmos/system.rb +4 -4
  630. data/lib/cosmos/system/system.rb +558 -558
  631. data/lib/cosmos/system/target.rb +178 -178
  632. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +254 -253
  633. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -716
  634. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  635. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  636. data/lib/cosmos/tools/cmd_tlm_server/api.rb +936 -940
  637. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  638. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -63
  639. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +511 -497
  640. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -241
  641. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1033 -1008
  642. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  643. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -176
  644. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +241 -221
  645. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  646. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  647. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  648. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  649. data/lib/cosmos/tools/data_viewer/data_viewer.rb +628 -600
  650. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -167
  651. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  652. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -149
  653. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -360
  654. data/lib/cosmos/tools/launcher/launcher.rb +184 -184
  655. data/lib/cosmos/tools/launcher/launcher_config.rb +175 -167
  656. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -41
  657. data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -104
  658. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +796 -768
  659. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  660. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  661. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -525
  662. data/lib/cosmos/tools/replay/replay.rb +495 -488
  663. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  664. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -139
  665. data/lib/cosmos/tools/script_runner/script_runner.rb +914 -914
  666. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  667. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1892 -1859
  668. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  669. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  670. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  671. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  672. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  673. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  674. data/lib/cosmos/tools/test_runner/test.rb +480 -480
  675. data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -1157
  676. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -338
  677. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  678. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -1008
  679. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  680. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  681. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  682. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  683. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -94
  684. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  685. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -180
  686. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  687. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  688. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -173
  689. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -177
  690. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +412 -409
  691. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  692. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  693. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -320
  694. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  695. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  696. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  697. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  698. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  699. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  700. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  701. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  702. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  703. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  704. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  705. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -1278
  706. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  707. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  708. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +111 -95
  709. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  710. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +72 -66
  711. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  712. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  713. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  714. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -458
  715. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +563 -544
  716. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -287
  717. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  718. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  719. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -70
  720. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -61
  721. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  722. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  723. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  724. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  725. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  726. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  727. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  728. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  729. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  730. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  731. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  732. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  733. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  734. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  735. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  736. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  737. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  738. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  739. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  740. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  741. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  742. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  743. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  744. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  745. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  746. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  747. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  748. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  749. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  750. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  751. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  752. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  753. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  754. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  755. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  756. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  757. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  758. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  759. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  760. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  761. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  762. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  763. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  764. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  765. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  766. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  767. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  768. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  769. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  770. data/lib/cosmos/top_level.rb +647 -596
  771. data/lib/cosmos/utilities.rb +11 -10
  772. data/lib/cosmos/utilities/crc.rb +166 -166
  773. data/lib/cosmos/utilities/csv.rb +83 -83
  774. data/lib/cosmos/utilities/logger.rb +137 -137
  775. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  776. data/lib/cosmos/utilities/message_log.rb +74 -74
  777. data/lib/cosmos/utilities/quaternion.rb +258 -258
  778. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  779. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  780. data/lib/cosmos/utilities/sleeper.rb +44 -0
  781. data/lib/cosmos/version.rb +12 -12
  782. data/lib/cosmos/win32/excel.rb +66 -66
  783. data/lib/cosmos/win32/win32.rb +387 -387
  784. data/lib/cosmos/win32/win32_main.rb +311 -311
  785. data/roodi.yml +24 -24
  786. data/run_gui_tests.bat +32 -32
  787. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  788. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  789. data/spec/config/config_parser_spec.rb +322 -322
  790. data/spec/conversions/conversion_spec.rb +31 -31
  791. data/spec/conversions/generic_conversion_spec.rb +45 -45
  792. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  793. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  794. data/spec/conversions/processor_conversion_spec.rb +45 -45
  795. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  796. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  797. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  798. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  799. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  800. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  801. data/spec/core_ext/array_spec.rb +186 -186
  802. data/spec/core_ext/class_spec.rb +36 -36
  803. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  804. data/spec/core_ext/exception_spec.rb +91 -91
  805. data/spec/core_ext/file_spec.rb +72 -72
  806. data/spec/core_ext/hash_spec.rb +24 -24
  807. data/spec/core_ext/io_spec.rb +46 -46
  808. data/spec/core_ext/kernel_spec.rb +54 -54
  809. data/spec/core_ext/math_spec.rb +116 -116
  810. data/spec/core_ext/matrix_spec.rb +66 -66
  811. data/spec/core_ext/objectspace_spec.rb +29 -29
  812. data/spec/core_ext/range_spec.rb +21 -21
  813. data/spec/core_ext/socket_spec.rb +32 -32
  814. data/spec/core_ext/string_spec.rb +223 -223
  815. data/spec/core_ext/stringio_spec.rb +21 -21
  816. data/spec/core_ext/time_spec.rb +151 -151
  817. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  818. data/spec/install/config/system/system.txt +33 -33
  819. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  820. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  821. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  822. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  823. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  824. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  825. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  826. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  827. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  828. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  829. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  830. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -294
  831. data/spec/install/config/targets/INST/target.txt +10 -10
  832. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  833. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  834. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  835. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  836. data/spec/interfaces/interface_spec.rb +130 -131
  837. data/spec/interfaces/linc_interface_spec.rb +199 -199
  838. data/spec/interfaces/serial_interface_spec.rb +56 -56
  839. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  840. data/spec/interfaces/stream_interface_spec.rb +157 -157
  841. data/spec/interfaces/tcpip_client_interface_spec.rb +54 -54
  842. data/spec/interfaces/tcpip_server_interface_spec.rb +151 -151
  843. data/spec/interfaces/udp_interface_spec.rb +175 -177
  844. data/spec/io/buffered_file_spec.rb +113 -113
  845. data/spec/io/io_multiplexer_spec.rb +94 -94
  846. data/spec/io/json_drb_object_spec.rb +99 -99
  847. data/spec/io/json_drb_spec.rb +311 -311
  848. data/spec/io/json_rpc_spec.rb +264 -264
  849. data/spec/io/raw_logger_pair_spec.rb +76 -76
  850. data/spec/io/raw_logger_spec.rb +133 -133
  851. data/spec/io/serial_driver_spec.rb +61 -61
  852. data/spec/io/stderr_spec.rb +32 -32
  853. data/spec/io/stdout_spec.rb +32 -32
  854. data/spec/io/tcpip_server_spec.rb +338 -338
  855. data/spec/io/udp_sockets_spec.rb +94 -94
  856. data/spec/io/win32_serial_driver_spec.rb +88 -88
  857. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  858. data/spec/packet_logs/packet_log_reader_spec.rb +408 -408
  859. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  860. data/spec/packet_logs/packet_log_writer_spec.rb +223 -223
  861. data/spec/packets/binary_accessor_spec.rb +2073 -2073
  862. data/spec/packets/commands_spec.rb +369 -369
  863. data/spec/packets/limits_response_spec.rb +25 -25
  864. data/spec/packets/limits_spec.rb +326 -326
  865. data/spec/packets/packet_config_spec.rb +1620 -1620
  866. data/spec/packets/packet_item_limits_spec.rb +161 -161
  867. data/spec/packets/packet_item_spec.rb +386 -386
  868. data/spec/packets/packet_spec.rb +1057 -949
  869. data/spec/packets/structure_item_spec.rb +195 -195
  870. data/spec/packets/structure_spec.rb +419 -419
  871. data/spec/packets/telemetry_spec.rb +535 -535
  872. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  873. data/spec/processors/processor_spec.rb +55 -55
  874. data/spec/processors/statistics_processor_spec.rb +60 -60
  875. data/spec/processors/watermark_processor_spec.rb +51 -51
  876. data/spec/script/script_spec.rb +654 -654
  877. data/spec/spec_helper.rb +154 -148
  878. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  879. data/spec/streams/fixed_stream_protocol_spec.rb +110 -110
  880. data/spec/streams/length_stream_protocol_spec.rb +297 -297
  881. data/spec/streams/preidentified_stream_protocol_spec.rb +118 -118
  882. data/spec/streams/serial_stream_spec.rb +105 -105
  883. data/spec/streams/stream_protocol_spec.rb +332 -332
  884. data/spec/streams/stream_spec.rb +29 -29
  885. data/spec/streams/tcpip_client_stream_spec.rb +54 -54
  886. data/spec/streams/tcpip_socket_stream_spec.rb +146 -146
  887. data/spec/streams/template_stream_protocol_spec.rb +151 -151
  888. data/spec/streams/terminated_stream_protocol_spec.rb +123 -123
  889. data/spec/system/system_spec.rb +645 -645
  890. data/spec/system/target_spec.rb +248 -248
  891. data/spec/tools/cmd_tlm_server/api_spec.rb +1087 -1113
  892. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  893. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  894. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +411 -411
  895. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  896. data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -123
  897. data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -147
  898. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  899. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -238
  900. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  901. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +98 -101
  902. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -208
  903. data/spec/top_level/top_level_spec.rb +334 -321
  904. data/spec/utilities/crc_spec.rb +45 -45
  905. data/spec/utilities/csv_spec.rb +97 -97
  906. data/spec/utilities/logger_spec.rb +102 -102
  907. data/spec/utilities/message_log_spec.rb +89 -89
  908. data/spec/utilities/quaternion_spec.rb +107 -107
  909. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  910. data/tasks/manifest.rake +22 -22
  911. data/tasks/spec.rake +23 -23
  912. metadata +18 -2
@@ -1,30 +1,30 @@
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/gui/qt'
13
- require 'cosmos/gui/text/completion_text_edit'
14
-
15
- module Cosmos
16
-
17
- class CompletionLineEdit < CompletionTextEdit
18
- def initialize(parent)
19
- super(parent)
20
- setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff)
21
- setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff)
22
- setMaximumBlockCount(1)
23
- # Create a temporary LineEdit to figure out a good height
24
- line = Qt::LineEdit.new("ASDF99")
25
- setMaximumHeight(line.sizeHint.height)
26
- line.dispose
27
- end
28
- end
29
-
30
- end # module Cosmos
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/gui/qt'
13
+ require 'cosmos/gui/text/completion_text_edit'
14
+
15
+ module Cosmos
16
+
17
+ class CompletionLineEdit < CompletionTextEdit
18
+ def initialize(parent)
19
+ super(parent)
20
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff)
21
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff)
22
+ setMaximumBlockCount(1)
23
+ # Create a temporary LineEdit to figure out a good height
24
+ line = Qt::LineEdit.new("ASDF99")
25
+ setMaximumHeight(line.sizeHint.height)
26
+ line.dispose
27
+ end
28
+ end
29
+
30
+ end # module Cosmos
@@ -1,179 +1,179 @@
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/gui/qt'
13
- require 'cosmos/gui/dialogs/splash'
14
-
15
- module Cosmos
16
-
17
- class CompletionTextEdit < Qt::PlainTextEdit
18
- slots 'highlight_line()'
19
-
20
- TRUE_VARIANT = Qt::Variant.new(true)
21
- SELECTION_DETAILS_POOL = []
22
-
23
- class SelectionDetails
24
- attr_reader :selection
25
- attr_reader :format
26
-
27
- def initialize
28
- @selection = Qt::TextEdit::ExtraSelection.new
29
- @format = @selection.format
30
- end
31
- end
32
-
33
- def initialize(parent)
34
- super(parent)
35
- setFocusPolicy(Qt::StrongFocus)
36
- setLineWrapMode(Qt::PlainTextEdit::NoWrap)
37
-
38
- @cursor = Qt::TextCursor.new(document())
39
- @selection_details = SELECTION_DETAILS_POOL.pop
40
- @selection_details = SelectionDetails.new unless @selection_details
41
- @selection_details.format.setProperty(Qt::TextFormat::FullWidthSelection, TRUE_VARIANT)
42
- @selection_details.selection.format = @selection_details.format
43
- @selection_details.selection.cursor = @cursor
44
-
45
- @last_hightlighted_line = 1
46
- @code_completion = nil
47
- begin
48
- @code_completion = Completion.new(self)
49
- rescue
50
- # Oh well - no completion
51
- end
52
- end
53
-
54
- def dispose
55
- super()
56
- @cursor.dispose
57
- SELECTION_DETAILS_POOL << @selection_details
58
- @code_completion.dispose if @code_completion
59
- end
60
-
61
- def keyPressCallback=(callback)
62
- @keypress_callback = callback
63
- end
64
-
65
- def keyPressEvent(event)
66
- # If the completion popup is visible then ignore the event and allow the popup to handle it
67
- if (@code_completion and @code_completion.popup.isVisible)
68
- case event.key
69
- when Qt::Key_Return, Qt::Key_Enter
70
- event.ignore
71
- return
72
- end
73
- end
74
-
75
- continue = @keypress_callback.call(event) if @keypress_callback
76
-
77
- case event.key
78
- when Qt::Key_Tab
79
- if event.modifiers == Qt::NoModifier
80
- indent_selection()
81
- end
82
- when Qt::Key_Backtab
83
- unindent_selection()
84
- else
85
- if continue != false
86
- super(event)
87
- @code_completion.handle_keypress(event) if @code_completion
88
- end
89
- end
90
- end
91
-
92
- def indent_selection
93
- cursor = textCursor
94
- # Figure out if the cursor has a selection
95
- no_selection = true
96
- no_selection = false if cursor.hasSelection
97
-
98
- # Start the edit block so this can be all undone with a single undo step
99
- cursor.beginEditBlock
100
- selection_end = cursor.selectionEnd
101
- # Initially place the cursor at the beginning of the selection
102
- # If nothing is selected this will just put the cursor at the beginning of the current line
103
- cursor.setPosition(textCursor.selectionStart)
104
- cursor.movePosition(Qt::TextCursor::StartOfLine)
105
- result = true
106
- while (cursor.position < selection_end and result == true) or (no_selection)
107
- # Add two spaces for a standard Ruby indent
108
- cursor.insertText(' ')
109
- # Move the cursor to the beginning of the next line
110
- cursor.movePosition(Qt::TextCursor::StartOfLine)
111
- result = cursor.movePosition(Qt::TextCursor::Down)
112
- # Since we inserted two spaces we need to move the end position by two
113
- selection_end += 2
114
- # If nothing was selected then we're working with a single line and we can break
115
- break if no_selection
116
- end
117
- cursor.endEditBlock
118
- end
119
-
120
- def unindent_selection
121
- cursor = textCursor
122
- # Start the edit block so this can be undone with a single undo step
123
- cursor.beginEditBlock
124
- # Initially place the cursor at the beginning of the selection
125
- # If nothing is selected this will just put the cursor at the beginning of the current line
126
- selection_end = cursor.selectionEnd
127
- cursor.setPosition(textCursor.selectionStart)
128
- cursor.movePosition(Qt::TextCursor::StartOfLine)
129
- result = true
130
- while cursor.position <= selection_end and result == true
131
- # Since we inserted two spaces for an indentation we remove a single character twice
132
- 2.times do
133
- # Only remove the text if we have spaces to remove
134
- if cursor.block.text =~ /^\s/
135
- cursor.deleteChar
136
- # Adjust the selection end since we just removed a character
137
- selection_end -= 1
138
- end
139
- end
140
- # Move down to the next line in case we have to unindent that
141
- # We store the result which is false if the move couldn't complete
142
- # For example if we're on the last line in the editor
143
- result = cursor.movePosition(Qt::TextCursor::Down)
144
- end
145
- cursor.endEditBlock
146
- end
147
-
148
- def highlight_line(line, color = 'palegreen') #102, 255, 102
149
- color = Cosmos::getColor(color)
150
- # Store the line number in case we need to rehighlight this line
151
- @last_hightlighted_line = line
152
- brush = Cosmos.getBrush(color)
153
- @selection_details.format.setBackground(brush)
154
- # Get the textCursor and move it to the specified line
155
- @cursor.movePosition(Qt::TextCursor::Start)
156
- # The line number is based in 1 based but the PlainTextEdit is 0 based
157
- @cursor.movePosition(Qt::TextCursor::Down, Qt::TextCursor::MoveAnchor, line-1)
158
- @cursor.clearSelection
159
- # By setting the text cursor after moving it we ensure we can see the highlight
160
- # If we just called setExtraSelections without setting the cursor we might not be able to see it
161
- setTextCursor(@cursor)
162
- @selection_details.selection.format = @selection_details.format
163
- @selection_details.selection.cursor = @cursor
164
- setExtraSelections([@selection_details.selection])
165
- # Center the cursor to ensure it is visible
166
- centerCursor()
167
- end
168
-
169
- def stop_highlight
170
- # Clearing the extra selections with a nil array clears the selection
171
- self.setExtraSelections([])
172
- end
173
-
174
- def rehighlight(color = 'palegreen')
175
- highlight_line(@last_hightlighted_line, color)
176
- end
177
- end
178
-
179
- end # module Cosmos
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/gui/qt'
13
+ require 'cosmos/gui/dialogs/splash'
14
+
15
+ module Cosmos
16
+
17
+ class CompletionTextEdit < Qt::PlainTextEdit
18
+ slots 'highlight_line()'
19
+
20
+ TRUE_VARIANT = Qt::Variant.new(true)
21
+ SELECTION_DETAILS_POOL = []
22
+
23
+ class SelectionDetails
24
+ attr_reader :selection
25
+ attr_reader :format
26
+
27
+ def initialize
28
+ @selection = Qt::TextEdit::ExtraSelection.new
29
+ @format = @selection.format
30
+ end
31
+ end
32
+
33
+ def initialize(parent)
34
+ super(parent)
35
+ setFocusPolicy(Qt::StrongFocus)
36
+ setLineWrapMode(Qt::PlainTextEdit::NoWrap)
37
+
38
+ @cursor = Qt::TextCursor.new(document())
39
+ @selection_details = SELECTION_DETAILS_POOL.pop
40
+ @selection_details = SelectionDetails.new unless @selection_details
41
+ @selection_details.format.setProperty(Qt::TextFormat::FullWidthSelection, TRUE_VARIANT)
42
+ @selection_details.selection.format = @selection_details.format
43
+ @selection_details.selection.cursor = @cursor
44
+
45
+ @last_hightlighted_line = 1
46
+ @code_completion = nil
47
+ begin
48
+ @code_completion = Completion.new(self)
49
+ rescue
50
+ # Oh well - no completion
51
+ end
52
+ end
53
+
54
+ def dispose
55
+ super()
56
+ @cursor.dispose
57
+ SELECTION_DETAILS_POOL << @selection_details
58
+ @code_completion.dispose if @code_completion
59
+ end
60
+
61
+ def keyPressCallback=(callback)
62
+ @keypress_callback = callback
63
+ end
64
+
65
+ def keyPressEvent(event)
66
+ # If the completion popup is visible then ignore the event and allow the popup to handle it
67
+ if (@code_completion and @code_completion.popup.isVisible)
68
+ case event.key
69
+ when Qt::Key_Return, Qt::Key_Enter
70
+ event.ignore
71
+ return
72
+ end
73
+ end
74
+
75
+ continue = @keypress_callback.call(event) if @keypress_callback
76
+
77
+ case event.key
78
+ when Qt::Key_Tab
79
+ if event.modifiers == Qt::NoModifier
80
+ indent_selection()
81
+ end
82
+ when Qt::Key_Backtab
83
+ unindent_selection()
84
+ else
85
+ if continue != false
86
+ super(event)
87
+ @code_completion.handle_keypress(event) if @code_completion
88
+ end
89
+ end
90
+ end
91
+
92
+ def indent_selection
93
+ cursor = textCursor
94
+ # Figure out if the cursor has a selection
95
+ no_selection = true
96
+ no_selection = false if cursor.hasSelection
97
+
98
+ # Start the edit block so this can be all undone with a single undo step
99
+ cursor.beginEditBlock
100
+ selection_end = cursor.selectionEnd
101
+ # Initially place the cursor at the beginning of the selection
102
+ # If nothing is selected this will just put the cursor at the beginning of the current line
103
+ cursor.setPosition(textCursor.selectionStart)
104
+ cursor.movePosition(Qt::TextCursor::StartOfLine)
105
+ result = true
106
+ while (cursor.position < selection_end and result == true) or (no_selection)
107
+ # Add two spaces for a standard Ruby indent
108
+ cursor.insertText(' ')
109
+ # Move the cursor to the beginning of the next line
110
+ cursor.movePosition(Qt::TextCursor::StartOfLine)
111
+ result = cursor.movePosition(Qt::TextCursor::Down)
112
+ # Since we inserted two spaces we need to move the end position by two
113
+ selection_end += 2
114
+ # If nothing was selected then we're working with a single line and we can break
115
+ break if no_selection
116
+ end
117
+ cursor.endEditBlock
118
+ end
119
+
120
+ def unindent_selection
121
+ cursor = textCursor
122
+ # Start the edit block so this can be undone with a single undo step
123
+ cursor.beginEditBlock
124
+ # Initially place the cursor at the beginning of the selection
125
+ # If nothing is selected this will just put the cursor at the beginning of the current line
126
+ selection_end = cursor.selectionEnd
127
+ cursor.setPosition(textCursor.selectionStart)
128
+ cursor.movePosition(Qt::TextCursor::StartOfLine)
129
+ result = true
130
+ while cursor.position <= selection_end and result == true
131
+ # Since we inserted two spaces for an indentation we remove a single character twice
132
+ 2.times do
133
+ # Only remove the text if we have spaces to remove
134
+ if cursor.block.text =~ /^\s/
135
+ cursor.deleteChar
136
+ # Adjust the selection end since we just removed a character
137
+ selection_end -= 1
138
+ end
139
+ end
140
+ # Move down to the next line in case we have to unindent that
141
+ # We store the result which is false if the move couldn't complete
142
+ # For example if we're on the last line in the editor
143
+ result = cursor.movePosition(Qt::TextCursor::Down)
144
+ end
145
+ cursor.endEditBlock
146
+ end
147
+
148
+ def highlight_line(line, color = 'palegreen') #102, 255, 102
149
+ color = Cosmos::getColor(color)
150
+ # Store the line number in case we need to rehighlight this line
151
+ @last_hightlighted_line = line
152
+ brush = Cosmos.getBrush(color)
153
+ @selection_details.format.setBackground(brush)
154
+ # Get the textCursor and move it to the specified line
155
+ @cursor.movePosition(Qt::TextCursor::Start)
156
+ # The line number is based in 1 based but the PlainTextEdit is 0 based
157
+ @cursor.movePosition(Qt::TextCursor::Down, Qt::TextCursor::MoveAnchor, line-1)
158
+ @cursor.clearSelection
159
+ # By setting the text cursor after moving it we ensure we can see the highlight
160
+ # If we just called setExtraSelections without setting the cursor we might not be able to see it
161
+ setTextCursor(@cursor)
162
+ @selection_details.selection.format = @selection_details.format
163
+ @selection_details.selection.cursor = @cursor
164
+ setExtraSelections([@selection_details.selection])
165
+ # Center the cursor to ensure it is visible
166
+ centerCursor()
167
+ end
168
+
169
+ def stop_highlight
170
+ # Clearing the extra selections with a nil array clears the selection
171
+ self.setExtraSelections([])
172
+ end
173
+
174
+ def rehighlight(color = 'palegreen')
175
+ highlight_line(@last_hightlighted_line, color)
176
+ end
177
+ end
178
+
179
+ end # module Cosmos
@@ -1,395 +1,395 @@
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/qt'
14
- require 'cosmos/gui/text/completion_text_edit'
15
-
16
- module Cosmos
17
-
18
- class RubyEditor < CompletionTextEdit
19
- slots 'line_count_changed()'
20
- slots 'update_line_number_area(const QRect &, int)'
21
- signals 'breakpoint_set(int)'
22
- signals 'breakpoint_cleared(int)'
23
- signals 'breakpoints_cleared()'
24
-
25
- attr_accessor :enable_breakpoints
26
-
27
- # This works but slows down the GUI significantly when pasting a large (10k line) block of code into the editor
28
- class RubySyntax < Qt::SyntaxHighlighter
29
- # Ruby keywords - http://www.ruby-doc.org/docs/keywords/1.9/
30
- # Also include some common methods that are typically called by
31
- # themselves like puts, print, sleep
32
- RUBY_KEYWORDS = %w(BEGIN END __ENCODING__ __END__ __FILE__ __LINE__ \
33
- alias and begin break case class def defined? do \
34
- else elsif end ensure false for if in module \
35
- next nil not or raise redo rescue retry return \
36
- self super then true undef unless until when while yield \
37
- puts print sleep) # common stand alone methods
38
-
39
- def self.create_format(color = Cosmos::BLACK, style='')
40
- color = Cosmos::getColor(color)
41
- brush = Cosmos::getBrush(color)
42
-
43
- format = Qt::TextCharFormat.new
44
- format.setForeground(brush)
45
- if style == 'bold'
46
- format.setFontWeight(Qt::Font::Bold)
47
- end
48
- if style == 'italic'
49
- format.setFontItalic(true)
50
- end
51
- format
52
- end
53
-
54
- # Syntax styles - refer to the ruby.properties in Scite
55
- STYLES = {
56
- 'normal' => create_format('black'),
57
- 'ruby_keyword' => create_format('darkBlue','bold'),
58
- 'cosmos_keyword' => create_format('blue','bold'),
59
- 'operator' => create_format('red'),
60
- 'brace' => create_format('black','bold'),
61
- 'class' => create_format('blue', 'bold'),
62
- 'method' => create_format(Cosmos::getColor(0, 127, 127), 'bold'),
63
- 'string' => create_format(Cosmos::getColor(127, 0, 127)),
64
- 'symbol' => create_format(Cosmos::getColor(192,160,48)),
65
- 'comment' => create_format('green'),
66
- }
67
-
68
- # Ruby braces
69
- BRACES = ['\{', '\}', '\(', '\)', '\[', '\]','\|']
70
-
71
- RULES = []
72
- RUBY_KEYWORDS.each do |w|
73
- RULES << ['\b'+w+'\b', 0, STYLES['ruby_keyword']]
74
- end
75
- Script.private_instance_methods.each do |w|
76
- RULES << ['\b'+w.to_s+'\b', 0, STYLES['cosmos_keyword']]
77
- end
78
- BRACES.each do |b|
79
- RULES << ["#{b}", 0, STYLES['brace']]
80
- end
81
- RULES.concat([
82
- # 'def' followed by an identifier
83
- ['\bdef\b\s*(\w+)', 1, STYLES['method']],
84
- # 'class' followed by an identifier
85
- ['\bclass\b\s*(\w+)', 1, STYLES['class']],
86
- # Ruby symbol
87
- [':\b\w+', 0, STYLES['symbol']],
88
- # Ruby global
89
- ['\\$\b\w+', 0, STYLES['string']],
90
- # A single # or a # not followed by { to the end
91
- ['(#$|#[^{]).*', 0, STYLES['comment']],
92
- # Regex, possibly containing escape sequences
93
- ["/.*/", 0, STYLES['string']],
94
- # Double-quoted string, possibly containing escape sequences
95
- ['"([^"\\\\]|\\\\.)*"', 0, STYLES['string']],
96
- # Match interpolated strings "blah #{code} blah"
97
- ['(\#\\{)[^\\}]*\\}', 1, STYLES['brace']],
98
- ['\#\\{[^\\}]*(\\})', 1, STYLES['brace']],
99
- ['\#\\{([^\\}]*)\\}', 1, STYLES['normal']],
100
- # Single-quoted string, possibly containing escape sequences
101
- ["'[^'\\\\]*(\\.[^'\\\\]*)*'", 0, STYLES['string']],
102
- # Back-tick string, possibly containing escape sequences
103
- ["`[^`\\\\]*(\\.[^`\\\\]*)*`", 0, STYLES['string']],
104
- ])
105
-
106
- # Build a QRegExp for each pattern
107
- RULES_INFO = []
108
- RULES.each do |pat, index, fmt|
109
- RULES_INFO << [Qt::RegExp.new(pat, Qt::CaseSensitive, Qt::RegExp::RegExp2), index, fmt]
110
- end
111
-
112
- def highlightBlock(text)
113
- # Do other syntax formatting
114
- RULES_INFO.each do |expression, nth, format|
115
- index = expression.indexIn(text, 0)
116
- last_index = index
117
- last_length = -1
118
- while index >= 0
119
- # We actually want the index of the nth match
120
- index = expression.pos(nth)
121
- # Bail if the index goes negative because it means
122
- # we won't have a valid capture
123
- break if index < 0
124
- length = expression.cap(nth).length()
125
- break if length <= 0
126
- # Break if we're in an endless loop
127
- break if (last_index == index and last_length == length)
128
- last_length = length
129
- last_index = index
130
- self.setFormat(index, length, format)
131
- index = expression.indexIn(text, index + length)
132
- end
133
- end
134
- end
135
- end
136
-
137
- class LineNumberArea < Qt::Widget
138
- def initialize(editor)
139
- super(editor)
140
- @codeEditor = editor
141
- self
142
- end
143
-
144
- def sizeHint()
145
- return Qt::Size(@codeEditor.lineNumberAreaWidth(), 0)
146
- end
147
-
148
- def paintEvent(event)
149
- @codeEditor.lineNumberAreaPaintEvent(event)
150
- end
151
- end
152
-
153
- CHAR_57 = Qt::Char.new(57)
154
-
155
- def initialize(parent)
156
- super(parent)
157
- if Kernel.is_windows?
158
- setFont(Cosmos.getFont("Courier", 10))
159
- @fontMetrics = Cosmos.getFontMetrics(Cosmos.getFont("Courier", 10))
160
- else
161
- setFont(Cosmos.getFont("Courier", 14))
162
- @fontMetrics = Cosmos.getFontMetrics(Cosmos.getFont("Courier", 14))
163
- end
164
-
165
- # This is needed so text searching highlights correctly
166
- setStyleSheet("selection-background-color: lightblue; selection-color: black;")
167
-
168
- @breakpoints = []
169
- @enable_breakpoints = false
170
-
171
- # RubySyntax works but slows down the GUI significantly when pasting a large (10k line) block of code into the editor
172
- @syntax = RubySyntax.new(document())
173
- @lineNumberArea = LineNumberArea.new(self)
174
-
175
- connect(self, SIGNAL('blockCountChanged(int)'), self, SLOT('line_count_changed()'))
176
- connect(self, SIGNAL('updateRequest(const QRect &, int)'), self, SLOT('update_line_number_area(const QRect &, int)'))
177
-
178
- line_count_changed()
179
- end
180
-
181
- def dispose
182
- super()
183
- @syntax.dispose
184
- @lineNumberArea.dispose
185
- end
186
-
187
- def context_menu(point)
188
- menu = createStandardContextMenu()
189
- if @enable_breakpoints
190
- menu.addSeparator()
191
-
192
- add_breakpoint = Qt::Action.new(tr("Add Breakpoint"), self)
193
- add_breakpoint.statusTip = tr("Add a breakpoint at this line")
194
- add_breakpoint.connect(SIGNAL('triggered()')) { breakpoint_click(point) }
195
- menu.addAction(add_breakpoint)
196
-
197
- clear_breakpoint = Qt::Action.new(tr("Clear Breakpoint"), self)
198
- clear_breakpoint.statusTip = tr("Clear an existing breakpoint at this line")
199
- clear_breakpoint.connect(SIGNAL('triggered()')) { breakpoint_click(point, false) }
200
- menu.addAction(clear_breakpoint)
201
-
202
- clear_all_breakpoints = Qt::Action.new(tr("Clear All Breakpoints"), self)
203
- clear_all_breakpoints.statusTip = tr("Clear all existing breakpoints")
204
- clear_all_breakpoints.connect(SIGNAL('triggered()')) do
205
- clear_breakpoints()
206
- emit breakpoints_cleared
207
- end
208
- menu.addAction(clear_all_breakpoints)
209
- end
210
- return menu
211
- end
212
-
213
- def breakpoint_click(point, add_breakpoint = true)
214
- line = point.y / @fontMetrics.height() + 1 + firstVisibleBlock().blockNumber()
215
- if add_breakpoint
216
- if line <= document.blockCount()
217
- breakpoint(line)
218
- emit breakpoint_set(line)
219
- end
220
- else
221
- if line <= document.blockCount()
222
- clear_breakpoint(line)
223
- emit breakpoint_cleared(line)
224
- end
225
- end
226
- end
227
-
228
- def breakpoint(line)
229
- @breakpoints << line
230
- @lineNumberArea.repaint
231
- end
232
-
233
- def clear_breakpoint(line)
234
- @breakpoints.delete(line)
235
- @lineNumberArea.repaint
236
- end
237
-
238
- def clear_breakpoints
239
- @breakpoints = []
240
- @lineNumberArea.repaint
241
- end
242
-
243
- def comment_or_uncomment_lines
244
- cursor = textCursor
245
- # Figure out if the cursor has a selection
246
- no_selection = true
247
- no_selection = false if cursor.hasSelection
248
-
249
- # Start the edit block so this can be all undone with a single undo step
250
- cursor.beginEditBlock
251
- selection_end = cursor.selectionEnd
252
- # Initially place the cursor at the beginning of the selection
253
- # If nothing is selected this will just put the cursor at the beginning of the current line
254
- cursor.setPosition(textCursor.selectionStart)
255
- cursor.movePosition(Qt::TextCursor::StartOfLine)
256
- result = true
257
- while (cursor.position < selection_end and result == true) or (no_selection)
258
- # Check for a special comment
259
- if cursor.block.text =~ /^\S*#~/
260
- cursor.deleteChar
261
- cursor.deleteChar
262
- # Since we deleted two spaces we need to move the end position by two
263
- selection_end -= 2
264
- else
265
- cursor.insertText("#~")
266
- # Since we deleted two spaces we need to move the end position by two
267
- selection_end += 2
268
- end
269
- # Move the cursor to the beginning of the next line
270
- cursor.movePosition(Qt::TextCursor::StartOfLine)
271
- result = cursor.movePosition(Qt::TextCursor::Down)
272
- # If nothing was selected then we're working with a single line and we can break
273
- break if no_selection
274
- end
275
- cursor.endEditBlock
276
- end
277
-
278
- def lineNumberAreaWidth
279
- digits = 1
280
- my_document = document()
281
- max = [1, my_document.blockCount()].max
282
-
283
- # Figure the line number power of ten to determine how much space we need
284
- while (max >= 10)
285
- max /= 10
286
- digits += 1
287
- end
288
- # We'll always display space for 5 digits so the line number area
289
- # isn't constantly expanding and contracting
290
- digits = 5 if digits < 5
291
- digits += 1 # always allow room for a breakpoint symbol
292
- # Get the font width of the character 57 ('9')
293
- # times the number of digits to display
294
- return (3 + @fontMetrics.width(CHAR_57) * digits)
295
- end
296
-
297
- def line_count_changed
298
- setViewportMargins(lineNumberAreaWidth(), 0, 0, 0)
299
- update
300
- end
301
-
302
- def update_line_number_area(rect, dy)
303
- if (dy)
304
- @lineNumberArea.scroll(0, dy)
305
- else
306
- @lineNumberArea.update(0, rect.y(), @lineNumberArea.width(), rect.height())
307
- end
308
- my_viewport = viewport()
309
- viewport_rect = my_viewport.rect()
310
- line_count_changed() if (rect.contains(viewport_rect))
311
- viewport_rect.dispose
312
- end
313
-
314
- def resizeEvent(e)
315
- super(e)
316
- cr = self.contentsRect()
317
- rect = Qt::Rect.new(cr.left(),
318
- cr.top(),
319
- lineNumberAreaWidth(),
320
- cr.height())
321
- @lineNumberArea.setGeometry(rect)
322
- cr.dispose
323
- rect.dispose
324
- end
325
-
326
- def lineNumberAreaPaintEvent(event)
327
- painter = Qt::Painter.new(@lineNumberArea)
328
- # On initialization sometimes we get some weird bad conditions so check for them
329
- if painter.isActive and not painter.paintEngine.nil?
330
- event_rect = event.rect()
331
- painter.fillRect(event_rect, Qt::lightGray)
332
-
333
- block = firstVisibleBlock()
334
- blockNumber = block.blockNumber()
335
-
336
- offset = contentOffset()
337
- rect = blockBoundingGeometry(block)
338
- rect2 = rect.translated(offset)
339
- top = rect2.top()
340
- rect3 = blockBoundingRect(block)
341
- bottom = top + rect3.height()
342
- offset.dispose
343
- offset = nil
344
- rect.dispose
345
- rect = nil
346
- rect2.dispose
347
- rect2 = nil
348
- rect3.dispose
349
- rect3 = nil
350
-
351
- width = @lineNumberArea.width()
352
- height = @fontMetrics.height()
353
- ellipse_width = @fontMetrics.width(CHAR_57)
354
- painter.setPen(Cosmos::BLACK)
355
- while (block.isValid() and top <= event_rect.bottom())
356
- if (block.isVisible() and bottom >= event_rect.top())
357
- number = blockNumber + 1
358
- painter.drawText(0, # x
359
- top, # y
360
- width, # width
361
- height, # height
362
- Qt::AlignRight, # flags
363
- number.to_s) # text
364
-
365
- if @enable_breakpoints and @breakpoints.include?(number)
366
- painter.setBrush(Cosmos.getBrush(Cosmos::RED))
367
- painter.drawEllipse(2,
368
- top+2,
369
- ellipse_width,
370
- ellipse_width)
371
- end
372
- end
373
-
374
- next_block = block.next()
375
- block.dispose
376
- block = next_block
377
- top = bottom
378
- rect = blockBoundingRect(block)
379
- bottom = top + rect.height()
380
- rect.dispose
381
- blockNumber += 1
382
- end
383
- block.dispose
384
- block = nil
385
- event_rect.dispose
386
- event_rect = nil
387
- end
388
- # Ensure the painter is disposed in the paint function to avoid this:
389
- # QPaintDevice: Cannot destroy paint device that is being painted
390
- painter.dispose
391
- painter = nil
392
- end
393
- end
394
-
395
- end # module Cosmos
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/qt'
14
+ require 'cosmos/gui/text/completion_text_edit'
15
+
16
+ module Cosmos
17
+
18
+ class RubyEditor < CompletionTextEdit
19
+ slots 'line_count_changed()'
20
+ slots 'update_line_number_area(const QRect &, int)'
21
+ signals 'breakpoint_set(int)'
22
+ signals 'breakpoint_cleared(int)'
23
+ signals 'breakpoints_cleared()'
24
+
25
+ attr_accessor :enable_breakpoints
26
+
27
+ # This works but slows down the GUI significantly when pasting a large (10k line) block of code into the editor
28
+ class RubySyntax < Qt::SyntaxHighlighter
29
+ # Ruby keywords - http://www.ruby-doc.org/docs/keywords/1.9/
30
+ # Also include some common methods that are typically called by
31
+ # themselves like puts, print, sleep
32
+ RUBY_KEYWORDS = %w(BEGIN END __ENCODING__ __END__ __FILE__ __LINE__ \
33
+ alias and begin break case class def defined? do \
34
+ else elsif end ensure false for if in module \
35
+ next nil not or raise redo rescue retry return \
36
+ self super then true undef unless until when while yield \
37
+ puts print sleep) # common stand alone methods
38
+
39
+ def self.create_format(color = Cosmos::BLACK, style='')
40
+ color = Cosmos::getColor(color)
41
+ brush = Cosmos::getBrush(color)
42
+
43
+ format = Qt::TextCharFormat.new
44
+ format.setForeground(brush)
45
+ if style == 'bold'
46
+ format.setFontWeight(Qt::Font::Bold)
47
+ end
48
+ if style == 'italic'
49
+ format.setFontItalic(true)
50
+ end
51
+ format
52
+ end
53
+
54
+ # Syntax styles - refer to the ruby.properties in Scite
55
+ STYLES = {
56
+ 'normal' => create_format('black'),
57
+ 'ruby_keyword' => create_format('darkBlue','bold'),
58
+ 'cosmos_keyword' => create_format('blue','bold'),
59
+ 'operator' => create_format('red'),
60
+ 'brace' => create_format('black','bold'),
61
+ 'class' => create_format('blue', 'bold'),
62
+ 'method' => create_format(Cosmos::getColor(0, 127, 127), 'bold'),
63
+ 'string' => create_format(Cosmos::getColor(127, 0, 127)),
64
+ 'symbol' => create_format(Cosmos::getColor(192,160,48)),
65
+ 'comment' => create_format('green'),
66
+ }
67
+
68
+ # Ruby braces
69
+ BRACES = ['\{', '\}', '\(', '\)', '\[', '\]','\|']
70
+
71
+ RULES = []
72
+ RUBY_KEYWORDS.each do |w|
73
+ RULES << ['\b'+w+'\b', 0, STYLES['ruby_keyword']]
74
+ end
75
+ Script.private_instance_methods.each do |w|
76
+ RULES << ['\b'+w.to_s+'\b', 0, STYLES['cosmos_keyword']]
77
+ end
78
+ BRACES.each do |b|
79
+ RULES << ["#{b}", 0, STYLES['brace']]
80
+ end
81
+ RULES.concat([
82
+ # 'def' followed by an identifier
83
+ ['\bdef\b\s*(\w+)', 1, STYLES['method']],
84
+ # 'class' followed by an identifier
85
+ ['\bclass\b\s*(\w+)', 1, STYLES['class']],
86
+ # Ruby symbol
87
+ [':\b\w+', 0, STYLES['symbol']],
88
+ # Ruby global
89
+ ['\\$\b\w+', 0, STYLES['string']],
90
+ # A single # or a # not followed by { to the end
91
+ ['(#$|#[^{]).*', 0, STYLES['comment']],
92
+ # Regex, possibly containing escape sequences
93
+ ["/.*/", 0, STYLES['string']],
94
+ # Double-quoted string, possibly containing escape sequences
95
+ ['"([^"\\\\]|\\\\.)*"', 0, STYLES['string']],
96
+ # Match interpolated strings "blah #{code} blah"
97
+ ['(\#\\{)[^\\}]*\\}', 1, STYLES['brace']],
98
+ ['\#\\{[^\\}]*(\\})', 1, STYLES['brace']],
99
+ ['\#\\{([^\\}]*)\\}', 1, STYLES['normal']],
100
+ # Single-quoted string, possibly containing escape sequences
101
+ ["'[^'\\\\]*(\\.[^'\\\\]*)*'", 0, STYLES['string']],
102
+ # Back-tick string, possibly containing escape sequences
103
+ ["`[^`\\\\]*(\\.[^`\\\\]*)*`", 0, STYLES['string']],
104
+ ])
105
+
106
+ # Build a QRegExp for each pattern
107
+ RULES_INFO = []
108
+ RULES.each do |pat, index, fmt|
109
+ RULES_INFO << [Qt::RegExp.new(pat, Qt::CaseSensitive, Qt::RegExp::RegExp2), index, fmt]
110
+ end
111
+
112
+ def highlightBlock(text)
113
+ # Do other syntax formatting
114
+ RULES_INFO.each do |expression, nth, format|
115
+ index = expression.indexIn(text, 0)
116
+ last_index = index
117
+ last_length = -1
118
+ while index >= 0
119
+ # We actually want the index of the nth match
120
+ index = expression.pos(nth)
121
+ # Bail if the index goes negative because it means
122
+ # we won't have a valid capture
123
+ break if index < 0
124
+ length = expression.cap(nth).length()
125
+ break if length <= 0
126
+ # Break if we're in an endless loop
127
+ break if (last_index == index and last_length == length)
128
+ last_length = length
129
+ last_index = index
130
+ self.setFormat(index, length, format)
131
+ index = expression.indexIn(text, index + length)
132
+ end
133
+ end
134
+ end
135
+ end
136
+
137
+ class LineNumberArea < Qt::Widget
138
+ def initialize(editor)
139
+ super(editor)
140
+ @codeEditor = editor
141
+ self
142
+ end
143
+
144
+ def sizeHint()
145
+ return Qt::Size(@codeEditor.lineNumberAreaWidth(), 0)
146
+ end
147
+
148
+ def paintEvent(event)
149
+ @codeEditor.lineNumberAreaPaintEvent(event)
150
+ end
151
+ end
152
+
153
+ CHAR_57 = Qt::Char.new(57)
154
+
155
+ def initialize(parent)
156
+ super(parent)
157
+ if Kernel.is_windows?
158
+ setFont(Cosmos.getFont("Courier", 10))
159
+ @fontMetrics = Cosmos.getFontMetrics(Cosmos.getFont("Courier", 10))
160
+ else
161
+ setFont(Cosmos.getFont("Courier", 14))
162
+ @fontMetrics = Cosmos.getFontMetrics(Cosmos.getFont("Courier", 14))
163
+ end
164
+
165
+ # This is needed so text searching highlights correctly
166
+ setStyleSheet("selection-background-color: lightblue; selection-color: black;")
167
+
168
+ @breakpoints = []
169
+ @enable_breakpoints = false
170
+
171
+ # RubySyntax works but slows down the GUI significantly when pasting a large (10k line) block of code into the editor
172
+ @syntax = RubySyntax.new(document())
173
+ @lineNumberArea = LineNumberArea.new(self)
174
+
175
+ connect(self, SIGNAL('blockCountChanged(int)'), self, SLOT('line_count_changed()'))
176
+ connect(self, SIGNAL('updateRequest(const QRect &, int)'), self, SLOT('update_line_number_area(const QRect &, int)'))
177
+
178
+ line_count_changed()
179
+ end
180
+
181
+ def dispose
182
+ super()
183
+ @syntax.dispose
184
+ @lineNumberArea.dispose
185
+ end
186
+
187
+ def context_menu(point)
188
+ menu = createStandardContextMenu()
189
+ if @enable_breakpoints
190
+ menu.addSeparator()
191
+
192
+ add_breakpoint = Qt::Action.new(tr("Add Breakpoint"), self)
193
+ add_breakpoint.statusTip = tr("Add a breakpoint at this line")
194
+ add_breakpoint.connect(SIGNAL('triggered()')) { breakpoint_click(point) }
195
+ menu.addAction(add_breakpoint)
196
+
197
+ clear_breakpoint = Qt::Action.new(tr("Clear Breakpoint"), self)
198
+ clear_breakpoint.statusTip = tr("Clear an existing breakpoint at this line")
199
+ clear_breakpoint.connect(SIGNAL('triggered()')) { breakpoint_click(point, false) }
200
+ menu.addAction(clear_breakpoint)
201
+
202
+ clear_all_breakpoints = Qt::Action.new(tr("Clear All Breakpoints"), self)
203
+ clear_all_breakpoints.statusTip = tr("Clear all existing breakpoints")
204
+ clear_all_breakpoints.connect(SIGNAL('triggered()')) do
205
+ clear_breakpoints()
206
+ emit breakpoints_cleared
207
+ end
208
+ menu.addAction(clear_all_breakpoints)
209
+ end
210
+ return menu
211
+ end
212
+
213
+ def breakpoint_click(point, add_breakpoint = true)
214
+ line = point.y / @fontMetrics.height() + 1 + firstVisibleBlock().blockNumber()
215
+ if add_breakpoint
216
+ if line <= document.blockCount()
217
+ breakpoint(line)
218
+ emit breakpoint_set(line)
219
+ end
220
+ else
221
+ if line <= document.blockCount()
222
+ clear_breakpoint(line)
223
+ emit breakpoint_cleared(line)
224
+ end
225
+ end
226
+ end
227
+
228
+ def breakpoint(line)
229
+ @breakpoints << line
230
+ @lineNumberArea.repaint
231
+ end
232
+
233
+ def clear_breakpoint(line)
234
+ @breakpoints.delete(line)
235
+ @lineNumberArea.repaint
236
+ end
237
+
238
+ def clear_breakpoints
239
+ @breakpoints = []
240
+ @lineNumberArea.repaint
241
+ end
242
+
243
+ def comment_or_uncomment_lines
244
+ cursor = textCursor
245
+ # Figure out if the cursor has a selection
246
+ no_selection = true
247
+ no_selection = false if cursor.hasSelection
248
+
249
+ # Start the edit block so this can be all undone with a single undo step
250
+ cursor.beginEditBlock
251
+ selection_end = cursor.selectionEnd
252
+ # Initially place the cursor at the beginning of the selection
253
+ # If nothing is selected this will just put the cursor at the beginning of the current line
254
+ cursor.setPosition(textCursor.selectionStart)
255
+ cursor.movePosition(Qt::TextCursor::StartOfLine)
256
+ result = true
257
+ while (cursor.position < selection_end and result == true) or (no_selection)
258
+ # Check for a special comment
259
+ if cursor.block.text =~ /^\S*#~/
260
+ cursor.deleteChar
261
+ cursor.deleteChar
262
+ # Since we deleted two spaces we need to move the end position by two
263
+ selection_end -= 2
264
+ else
265
+ cursor.insertText("#~")
266
+ # Since we deleted two spaces we need to move the end position by two
267
+ selection_end += 2
268
+ end
269
+ # Move the cursor to the beginning of the next line
270
+ cursor.movePosition(Qt::TextCursor::StartOfLine)
271
+ result = cursor.movePosition(Qt::TextCursor::Down)
272
+ # If nothing was selected then we're working with a single line and we can break
273
+ break if no_selection
274
+ end
275
+ cursor.endEditBlock
276
+ end
277
+
278
+ def lineNumberAreaWidth
279
+ digits = 1
280
+ my_document = document()
281
+ max = [1, my_document.blockCount()].max
282
+
283
+ # Figure the line number power of ten to determine how much space we need
284
+ while (max >= 10)
285
+ max /= 10
286
+ digits += 1
287
+ end
288
+ # We'll always display space for 5 digits so the line number area
289
+ # isn't constantly expanding and contracting
290
+ digits = 5 if digits < 5
291
+ digits += 1 # always allow room for a breakpoint symbol
292
+ # Get the font width of the character 57 ('9')
293
+ # times the number of digits to display
294
+ return (3 + @fontMetrics.width(CHAR_57) * digits)
295
+ end
296
+
297
+ def line_count_changed
298
+ setViewportMargins(lineNumberAreaWidth(), 0, 0, 0)
299
+ update
300
+ end
301
+
302
+ def update_line_number_area(rect, dy)
303
+ if (dy)
304
+ @lineNumberArea.scroll(0, dy)
305
+ else
306
+ @lineNumberArea.update(0, rect.y(), @lineNumberArea.width(), rect.height())
307
+ end
308
+ my_viewport = viewport()
309
+ viewport_rect = my_viewport.rect()
310
+ line_count_changed() if (rect.contains(viewport_rect))
311
+ viewport_rect.dispose
312
+ end
313
+
314
+ def resizeEvent(e)
315
+ super(e)
316
+ cr = self.contentsRect()
317
+ rect = Qt::Rect.new(cr.left(),
318
+ cr.top(),
319
+ lineNumberAreaWidth(),
320
+ cr.height())
321
+ @lineNumberArea.setGeometry(rect)
322
+ cr.dispose
323
+ rect.dispose
324
+ end
325
+
326
+ def lineNumberAreaPaintEvent(event)
327
+ painter = Qt::Painter.new(@lineNumberArea)
328
+ # On initialization sometimes we get some weird bad conditions so check for them
329
+ if painter.isActive and not painter.paintEngine.nil?
330
+ event_rect = event.rect()
331
+ painter.fillRect(event_rect, Qt::lightGray)
332
+
333
+ block = firstVisibleBlock()
334
+ blockNumber = block.blockNumber()
335
+
336
+ offset = contentOffset()
337
+ rect = blockBoundingGeometry(block)
338
+ rect2 = rect.translated(offset)
339
+ top = rect2.top()
340
+ rect3 = blockBoundingRect(block)
341
+ bottom = top + rect3.height()
342
+ offset.dispose
343
+ offset = nil
344
+ rect.dispose
345
+ rect = nil
346
+ rect2.dispose
347
+ rect2 = nil
348
+ rect3.dispose
349
+ rect3 = nil
350
+
351
+ width = @lineNumberArea.width()
352
+ height = @fontMetrics.height()
353
+ ellipse_width = @fontMetrics.width(CHAR_57)
354
+ painter.setPen(Cosmos::BLACK)
355
+ while (block.isValid() and top <= event_rect.bottom())
356
+ if (block.isVisible() and bottom >= event_rect.top())
357
+ number = blockNumber + 1
358
+ painter.drawText(0, # x
359
+ top, # y
360
+ width, # width
361
+ height, # height
362
+ Qt::AlignRight, # flags
363
+ number.to_s) # text
364
+
365
+ if @enable_breakpoints and @breakpoints.include?(number)
366
+ painter.setBrush(Cosmos.getBrush(Cosmos::RED))
367
+ painter.drawEllipse(2,
368
+ top+2,
369
+ ellipse_width,
370
+ ellipse_width)
371
+ end
372
+ end
373
+
374
+ next_block = block.next()
375
+ block.dispose
376
+ block = next_block
377
+ top = bottom
378
+ rect = blockBoundingRect(block)
379
+ bottom = top + rect.height()
380
+ rect.dispose
381
+ blockNumber += 1
382
+ end
383
+ block.dispose
384
+ block = nil
385
+ event_rect.dispose
386
+ event_rect = nil
387
+ end
388
+ # Ensure the painter is disposed in the paint function to avoid this:
389
+ # QPaintDevice: Cannot destroy paint device that is being painted
390
+ painter.dispose
391
+ painter = nil
392
+ end
393
+ end
394
+
395
+ end # module Cosmos