curses 1.3.0 → 1.4.2

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 (256) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +19 -0
  3. data/.github/workflows/ubuntu.yml +26 -0
  4. data/.github/workflows/windows.yml +25 -0
  5. data/History.md +34 -0
  6. data/README.md +14 -46
  7. data/Rakefile +0 -86
  8. data/curses.gemspec +2 -3
  9. data/ext/curses/curses.c +70 -58
  10. data/ext/curses/extconf.rb +134 -21
  11. data/lib/curses.rb +5 -12
  12. data/sample/addch.rb +16 -0
  13. data/sample/attr_demo.rb +32 -0
  14. data/sample/colors.rb +26 -0
  15. data/sample/menu.rb +3 -3
  16. data/sample/mouse_move.rb +75 -0
  17. data/vendor/PDCurses/.gitignore +47 -0
  18. data/vendor/PDCurses/.travis.yml +49 -0
  19. data/vendor/PDCurses/CMakeLists.txt +68 -0
  20. data/vendor/PDCurses/HISTORY.md +2036 -0
  21. data/vendor/PDCurses/IMPLEMNT.md +327 -0
  22. data/vendor/PDCurses/README.md +77 -0
  23. data/vendor/PDCurses/acs_defs.h +265 -0
  24. data/vendor/PDCurses/appveyor.yml +218 -0
  25. data/vendor/PDCurses/cmake/README.md +71 -0
  26. data/vendor/PDCurses/cmake/build_dependencies.cmake +178 -0
  27. data/vendor/PDCurses/cmake/build_options.cmake +25 -0
  28. data/vendor/PDCurses/cmake/dll_version.cmake +26 -0
  29. data/vendor/PDCurses/cmake/gen_config_header.cmake +43 -0
  30. data/vendor/PDCurses/cmake/get_version.cmake +17 -0
  31. data/vendor/PDCurses/cmake/make_uninstall.cmake +19 -0
  32. data/vendor/PDCurses/cmake/project_common.cmake +121 -0
  33. data/vendor/PDCurses/cmake/resource.in.cmake +52 -0
  34. data/vendor/PDCurses/cmake/sdl2_ttf/CMakeLists.txt +83 -0
  35. data/vendor/PDCurses/cmake/target_arch.cmake +36 -0
  36. data/vendor/PDCurses/cmake/version.in.cmake +73 -0
  37. data/vendor/PDCurses/cmake/watcom_open_dos16_toolchain.cmake +96 -0
  38. data/vendor/PDCurses/cmake/watcom_open_dos32_toolchain.cmake +106 -0
  39. data/vendor/PDCurses/cmake/watcom_open_os2v2_toolchain.cmake +105 -0
  40. data/vendor/PDCurses/curses.h +1846 -0
  41. data/vendor/PDCurses/curspriv.h +134 -0
  42. data/vendor/PDCurses/demos/README.md +25 -0
  43. data/vendor/PDCurses/demos/firework.c +144 -0
  44. data/vendor/PDCurses/demos/newtest.c +581 -0
  45. data/vendor/PDCurses/demos/ozdemo.c +447 -0
  46. data/vendor/PDCurses/demos/ptest.c +283 -0
  47. data/vendor/PDCurses/demos/rain.c +157 -0
  48. data/vendor/PDCurses/demos/testcurs.c +1607 -0
  49. data/vendor/PDCurses/demos/tui.c +1048 -0
  50. data/vendor/PDCurses/demos/tui.h +65 -0
  51. data/vendor/PDCurses/demos/tuidemo.c +233 -0
  52. data/vendor/PDCurses/demos/version.c +61 -0
  53. data/vendor/PDCurses/demos/worm.c +432 -0
  54. data/vendor/PDCurses/demos/xmas.c +955 -0
  55. data/vendor/PDCurses/dos/CMakeLists.txt +47 -0
  56. data/vendor/PDCurses/dos/Makefile.bcc +83 -0
  57. data/vendor/PDCurses/dos/Makefile.dmc +257 -0
  58. data/vendor/PDCurses/dos/Makefile.msc +113 -0
  59. data/vendor/PDCurses/dos/Makefile.wcc +107 -0
  60. data/vendor/PDCurses/dos/README.md +51 -0
  61. data/vendor/PDCurses/dos/bccdos.lrf +9 -0
  62. data/vendor/PDCurses/dos/mscdos.lrf +50 -0
  63. data/vendor/PDCurses/dos/pdcclip.c +132 -0
  64. data/vendor/PDCurses/dos/pdcdisp.c +135 -0
  65. data/vendor/PDCurses/dos/pdcdos.h +194 -0
  66. data/vendor/PDCurses/dos/pdcgetsc.c +98 -0
  67. data/vendor/PDCurses/dos/pdckbd.c +513 -0
  68. data/vendor/PDCurses/dos/pdcscrn.c +785 -0
  69. data/vendor/PDCurses/dos/pdcsetsc.c +101 -0
  70. data/vendor/PDCurses/dos/pdcutil.c +212 -0
  71. data/vendor/PDCurses/libobjs.mif +26 -0
  72. data/vendor/PDCurses/makedist.mif +20 -0
  73. data/vendor/PDCurses/man/README.md +21 -0
  74. data/vendor/PDCurses/man/intro.md +361 -0
  75. data/vendor/PDCurses/man/manext.c +119 -0
  76. data/vendor/PDCurses/man/sdl.md +152 -0
  77. data/vendor/PDCurses/man/sdl2.md +58 -0
  78. data/vendor/PDCurses/man/x11.md +407 -0
  79. data/vendor/PDCurses/ncurses/CMakeLists.txt +66 -0
  80. data/vendor/PDCurses/ncurses/README.md +26 -0
  81. data/vendor/PDCurses/ncurses/makefile +29 -0
  82. data/vendor/PDCurses/os2/CMakeLists.txt +41 -0
  83. data/vendor/PDCurses/os2/Makefile.bcc +90 -0
  84. data/vendor/PDCurses/os2/Makefile.wcc +43 -0
  85. data/vendor/PDCurses/os2/README.md +43 -0
  86. data/vendor/PDCurses/os2/iccos2.lrf +50 -0
  87. data/vendor/PDCurses/os2/iccos2.mak +256 -0
  88. data/vendor/PDCurses/os2/pdcclip.c +188 -0
  89. data/vendor/PDCurses/os2/pdcdisp.c +93 -0
  90. data/vendor/PDCurses/os2/pdcgetsc.c +89 -0
  91. data/vendor/PDCurses/os2/pdckbd.c +521 -0
  92. data/vendor/PDCurses/os2/pdcos2.h +55 -0
  93. data/vendor/PDCurses/os2/pdcscrn.c +449 -0
  94. data/vendor/PDCurses/os2/pdcsetsc.c +112 -0
  95. data/vendor/PDCurses/os2/pdcutil.c +52 -0
  96. data/vendor/PDCurses/panel.h +56 -0
  97. data/vendor/PDCurses/pdcurses/README.md +25 -0
  98. data/vendor/PDCurses/pdcurses/addch.c +693 -0
  99. data/vendor/PDCurses/pdcurses/addchstr.c +245 -0
  100. data/vendor/PDCurses/pdcurses/addstr.c +240 -0
  101. data/vendor/PDCurses/pdcurses/attr.c +359 -0
  102. data/vendor/PDCurses/pdcurses/beep.c +68 -0
  103. data/vendor/PDCurses/pdcurses/bkgd.c +223 -0
  104. data/vendor/PDCurses/pdcurses/border.c +411 -0
  105. data/vendor/PDCurses/pdcurses/clear.c +159 -0
  106. data/vendor/PDCurses/pdcurses/color.c +298 -0
  107. data/vendor/PDCurses/pdcurses/debug.c +109 -0
  108. data/vendor/PDCurses/pdcurses/delch.c +96 -0
  109. data/vendor/PDCurses/pdcurses/deleteln.c +211 -0
  110. data/vendor/PDCurses/pdcurses/deprec.c +27 -0
  111. data/vendor/PDCurses/pdcurses/getch.c +417 -0
  112. data/vendor/PDCurses/pdcurses/getstr.c +474 -0
  113. data/vendor/PDCurses/pdcurses/getyx.c +139 -0
  114. data/vendor/PDCurses/pdcurses/inch.c +127 -0
  115. data/vendor/PDCurses/pdcurses/inchstr.c +214 -0
  116. data/vendor/PDCurses/pdcurses/initscr.c +367 -0
  117. data/vendor/PDCurses/pdcurses/inopts.c +324 -0
  118. data/vendor/PDCurses/pdcurses/insch.c +271 -0
  119. data/vendor/PDCurses/pdcurses/insstr.c +264 -0
  120. data/vendor/PDCurses/pdcurses/instr.c +246 -0
  121. data/vendor/PDCurses/pdcurses/kernel.c +259 -0
  122. data/vendor/PDCurses/pdcurses/keyname.c +157 -0
  123. data/vendor/PDCurses/pdcurses/mouse.c +438 -0
  124. data/vendor/PDCurses/pdcurses/move.c +57 -0
  125. data/vendor/PDCurses/pdcurses/outopts.c +159 -0
  126. data/vendor/PDCurses/pdcurses/overlay.c +214 -0
  127. data/vendor/PDCurses/pdcurses/pad.c +260 -0
  128. data/vendor/PDCurses/pdcurses/panel.c +633 -0
  129. data/vendor/PDCurses/pdcurses/printw.c +126 -0
  130. data/vendor/PDCurses/pdcurses/refresh.c +279 -0
  131. data/vendor/PDCurses/pdcurses/scanw.c +578 -0
  132. data/vendor/PDCurses/pdcurses/scr_dump.c +213 -0
  133. data/vendor/PDCurses/pdcurses/scroll.c +101 -0
  134. data/vendor/PDCurses/pdcurses/slk.c +591 -0
  135. data/vendor/PDCurses/pdcurses/termattr.c +182 -0
  136. data/vendor/PDCurses/pdcurses/terminfo.c +217 -0
  137. data/vendor/PDCurses/pdcurses/touch.c +163 -0
  138. data/vendor/PDCurses/pdcurses/util.c +312 -0
  139. data/vendor/PDCurses/pdcurses/window.c +569 -0
  140. data/vendor/PDCurses/sdl1/Makefile.mng +110 -0
  141. data/vendor/PDCurses/sdl1/README.md +31 -0
  142. data/vendor/PDCurses/sdl1/deffont.h +385 -0
  143. data/vendor/PDCurses/sdl1/deficon.h +23 -0
  144. data/vendor/PDCurses/sdl1/pdcclip.c +131 -0
  145. data/vendor/PDCurses/sdl1/pdcdisp.c +373 -0
  146. data/vendor/PDCurses/sdl1/pdcgetsc.c +30 -0
  147. data/vendor/PDCurses/sdl1/pdckbd.c +405 -0
  148. data/vendor/PDCurses/sdl1/pdcscrn.c +414 -0
  149. data/vendor/PDCurses/sdl1/pdcsdl.h +31 -0
  150. data/vendor/PDCurses/sdl1/pdcsetsc.c +64 -0
  151. data/vendor/PDCurses/sdl1/pdcutil.c +40 -0
  152. data/vendor/PDCurses/sdl1/sdltest.c +79 -0
  153. data/vendor/PDCurses/sdl2/CMakeLists.txt +76 -0
  154. data/vendor/PDCurses/sdl2/Makefile.vc +164 -0
  155. data/vendor/PDCurses/sdl2/README.md +34 -0
  156. data/vendor/PDCurses/sdl2/deffont.h +385 -0
  157. data/vendor/PDCurses/sdl2/deficon.h +23 -0
  158. data/vendor/PDCurses/sdl2/pdcclip.c +93 -0
  159. data/vendor/PDCurses/sdl2/pdcdisp.c +534 -0
  160. data/vendor/PDCurses/sdl2/pdcgetsc.c +30 -0
  161. data/vendor/PDCurses/sdl2/pdckbd.c +480 -0
  162. data/vendor/PDCurses/sdl2/pdcscrn.c +443 -0
  163. data/vendor/PDCurses/sdl2/pdcsdl.h +33 -0
  164. data/vendor/PDCurses/sdl2/pdcsetsc.c +67 -0
  165. data/vendor/PDCurses/sdl2/pdcutil.c +39 -0
  166. data/vendor/PDCurses/sdl2/sdltest.c +81 -0
  167. data/vendor/PDCurses/term.h +48 -0
  168. data/vendor/PDCurses/version.mif +7 -0
  169. data/vendor/PDCurses/vt/CMakeLists.txt +28 -0
  170. data/vendor/PDCurses/vt/Makefile.bcc +111 -0
  171. data/vendor/PDCurses/vt/Makefile.dmc +258 -0
  172. data/vendor/PDCurses/vt/Makefile.vc +144 -0
  173. data/vendor/PDCurses/vt/Makefile.wcc +107 -0
  174. data/vendor/PDCurses/vt/README.md +64 -0
  175. data/vendor/PDCurses/vt/pdcclip.c +20 -0
  176. data/vendor/PDCurses/vt/pdcdisp.c +284 -0
  177. data/vendor/PDCurses/vt/pdcgetsc.c +27 -0
  178. data/vendor/PDCurses/vt/pdckbd.c +394 -0
  179. data/vendor/PDCurses/vt/pdcscrn.c +434 -0
  180. data/vendor/PDCurses/vt/pdcsetsc.c +45 -0
  181. data/vendor/PDCurses/vt/pdcutil.c +43 -0
  182. data/vendor/PDCurses/vt/pdcvt.h +16 -0
  183. data/vendor/PDCurses/watcom.mif +68 -0
  184. data/vendor/PDCurses/wincon/CMakeLists.txt +27 -0
  185. data/vendor/PDCurses/wincon/Makefile.bcc +88 -0
  186. data/vendor/PDCurses/wincon/Makefile.dmc +256 -0
  187. data/vendor/PDCurses/wincon/Makefile.lcc +273 -0
  188. data/vendor/PDCurses/wincon/Makefile.mng +176 -0
  189. data/vendor/PDCurses/wincon/Makefile.vc +144 -0
  190. data/vendor/PDCurses/wincon/Makefile.wcc +51 -0
  191. data/vendor/PDCurses/wincon/README.md +85 -0
  192. data/vendor/PDCurses/wincon/pdcclip.c +174 -0
  193. data/vendor/PDCurses/wincon/pdcdisp.c +143 -0
  194. data/vendor/PDCurses/wincon/pdcgetsc.c +55 -0
  195. data/vendor/PDCurses/wincon/pdckbd.c +786 -0
  196. data/vendor/PDCurses/wincon/pdcscrn.c +717 -0
  197. data/vendor/PDCurses/wincon/pdcsetsc.c +91 -0
  198. data/vendor/PDCurses/wincon/pdcurses.ico +0 -0
  199. data/vendor/PDCurses/wincon/pdcurses.rc +28 -0
  200. data/vendor/PDCurses/wincon/pdcutil.c +41 -0
  201. data/vendor/PDCurses/wincon/pdcwin.h +31 -0
  202. data/vendor/PDCurses/wingui/CMakeLists.txt +27 -0
  203. data/vendor/PDCurses/wingui/Makefile.bcc +85 -0
  204. data/vendor/PDCurses/wingui/Makefile.dmc +259 -0
  205. data/vendor/PDCurses/wingui/Makefile.lcc +273 -0
  206. data/vendor/PDCurses/wingui/Makefile.mng +171 -0
  207. data/vendor/PDCurses/wingui/Makefile.vc +144 -0
  208. data/vendor/PDCurses/wingui/Makefile.wcc +51 -0
  209. data/vendor/PDCurses/wingui/README.md +93 -0
  210. data/vendor/PDCurses/wingui/pdcclip.c +174 -0
  211. data/vendor/PDCurses/wingui/pdcdisp.c +718 -0
  212. data/vendor/PDCurses/wingui/pdcgetsc.c +30 -0
  213. data/vendor/PDCurses/wingui/pdckbd.c +143 -0
  214. data/vendor/PDCurses/wingui/pdcscrn.c +2797 -0
  215. data/vendor/PDCurses/wingui/pdcsetsc.c +89 -0
  216. data/vendor/PDCurses/wingui/pdcurses.ico +0 -0
  217. data/vendor/PDCurses/wingui/pdcurses.rc +28 -0
  218. data/vendor/PDCurses/wingui/pdcutil.c +61 -0
  219. data/vendor/PDCurses/wingui/pdcwin.h +122 -0
  220. data/vendor/PDCurses/x11/Makefile.in +754 -0
  221. data/vendor/PDCurses/x11/PDCurses.spec +82 -0
  222. data/vendor/PDCurses/x11/README.md +62 -0
  223. data/vendor/PDCurses/x11/ScrollBox.c +319 -0
  224. data/vendor/PDCurses/x11/ScrollBox.h +51 -0
  225. data/vendor/PDCurses/x11/ScrollBoxP.h +70 -0
  226. data/vendor/PDCurses/x11/aclocal.m4 +994 -0
  227. data/vendor/PDCurses/x11/big_icon.xbm +46 -0
  228. data/vendor/PDCurses/x11/compose.h +201 -0
  229. data/vendor/PDCurses/x11/config.guess +1500 -0
  230. data/vendor/PDCurses/x11/config.h.in +100 -0
  231. data/vendor/PDCurses/x11/config.sub +1616 -0
  232. data/vendor/PDCurses/x11/configure +6700 -0
  233. data/vendor/PDCurses/x11/configure.ac +295 -0
  234. data/vendor/PDCurses/x11/debian/changelog +6 -0
  235. data/vendor/PDCurses/x11/debian/compat +1 -0
  236. data/vendor/PDCurses/x11/debian/control +11 -0
  237. data/vendor/PDCurses/x11/debian/copyright +27 -0
  238. data/vendor/PDCurses/x11/debian/rules +98 -0
  239. data/vendor/PDCurses/x11/install-sh +253 -0
  240. data/vendor/PDCurses/x11/little_icon.xbm +14 -0
  241. data/vendor/PDCurses/x11/ncurses_cfg.h +45 -0
  242. data/vendor/PDCurses/x11/pdcclip.c +173 -0
  243. data/vendor/PDCurses/x11/pdcdisp.c +85 -0
  244. data/vendor/PDCurses/x11/pdcgetsc.c +28 -0
  245. data/vendor/PDCurses/x11/pdckbd.c +104 -0
  246. data/vendor/PDCurses/x11/pdcscrn.c +258 -0
  247. data/vendor/PDCurses/x11/pdcsetsc.c +95 -0
  248. data/vendor/PDCurses/x11/pdcutil.c +52 -0
  249. data/vendor/PDCurses/x11/pdcx11.c +316 -0
  250. data/vendor/PDCurses/x11/pdcx11.h +191 -0
  251. data/vendor/PDCurses/x11/sb.c +155 -0
  252. data/vendor/PDCurses/x11/x11.c +3686 -0
  253. data/vendor/PDCurses/x11/xcurses-config.in +81 -0
  254. metadata +258 -24
  255. data/.travis.yml +0 -16
  256. data/appveyor.yml +0 -16
@@ -1,4 +1,6 @@
1
1
  require 'mkmf'
2
+ require 'shellwords'
3
+ require 'fileutils'
2
4
 
3
5
  def have_all(*args)
4
6
  old_libs = $libs.dup
@@ -21,22 +23,78 @@ def have_all(*args)
21
23
  end
22
24
  end
23
25
 
24
- dir_config('curses')
25
- dir_config('ncurses')
26
- dir_config('termcap')
27
-
28
- have_library("mytinfo", "tgetent") if /bow/ =~ RUBY_PLATFORM
29
- have_library("tinfo", "tgetent") or have_library("termcap", "tgetent")
26
+ def exec_command(cmd)
27
+ puts "> #{cmd}"
28
+ if !system(cmd)
29
+ STDERR.puts("External command failed")
30
+ exit 1
31
+ end
32
+ end
30
33
 
31
- header_library = nil
32
- [
34
+ $library_candidates = [
33
35
  ["ncursesw/curses.h", ["ncursesw"]],
34
36
  ["ncurses.h", ["ncursesw", "ncurses"]],
35
37
  ["ncurses/curses.h", ["ncurses"]],
36
38
  ["curses_colr/curses.h", ["cur_colr"]],
37
39
  ["curses.h", ["curses", "pdcurses"]],
38
40
  # ["xcurses.h", ["XCurses"]], # XCurses (PDCurses for X11)
39
- ].each {|hdr, libs|
41
+ ]
42
+
43
+ $mingw = /mingw/ =~ RUBY_PLATFORM
44
+ $mswin = /mswin/ =~ RUBY_PLATFORM
45
+ $windows = $mingw || $mswin
46
+ $x64 = /x64/ =~ RUBY_PLATFORM
47
+ $use_system_libs = arg_config('--use-system-libraries',
48
+ ENV.key?("CURSES_USE_SYSTEM_LIBRARIES"))
49
+ $idefault = nil
50
+ $ldefault = nil
51
+ $pdcurses_wide_default = nil
52
+ $pdcurses_dll_default = nil
53
+ $curses_version_default = nil
54
+ $use_bundled_pdcurses = !$use_system_libs && /mingw|mswin/ =~ RUBY_PLATFORM
55
+ if $use_bundled_pdcurses
56
+ $pdcurses_wide_default = true
57
+ $curses_version_default = "function"
58
+ pdcurses_dir = File.expand_path("../../vendor/PDCurses", __dir__)
59
+ $idefault = $ldefault = pdcurses_dir
60
+ wincon_dir = File.expand_path("wincon", pdcurses_dir)
61
+ old_dir = Dir.pwd
62
+ Dir.chdir(wincon_dir)
63
+ begin
64
+ if $mswin
65
+ exec_command "nmake -f Makefile.vc clean all WIDE=Y DLL=Y"
66
+ FileUtils.cp("pdcurses.dll", pdcurses_dir)
67
+ FileUtils.cp("pdcurses.lib", pdcurses_dir)
68
+ $pdcurses_dll_default = true
69
+ else
70
+ if $x64
71
+ exec_command "make -f Makefile.mng clean all _w64=1 WIDE=Y DLL=N"
72
+ else
73
+ exec_command "make -f Makefile.mng clean all WIDE=Y DLL=N"
74
+ end
75
+ FileUtils.cp("pdcurses.a", File.expand_path("libpdcurses.a", pdcurses_dir))
76
+ end
77
+ ensure
78
+ Dir.chdir(old_dir)
79
+ end
80
+ FileUtils.cp(File.expand_path("curses.h", pdcurses_dir),
81
+ File.expand_path("pdcurses.h", pdcurses_dir))
82
+ $library_candidates = [
83
+ ["pdcurses.h", ["pdcurses"]]
84
+ ]
85
+ end
86
+
87
+ dir_config('curses', $idefault, $ldefault)
88
+ dir_config('ncurses')
89
+ dir_config('termcap')
90
+
91
+ have_library("mytinfo", "tgetent") if /bow/ =~ RUBY_PLATFORM
92
+ have_library("tinfow", "tgetent") ||
93
+ have_library("tinfo", "tgetent") ||
94
+ have_library("termcap", "tgetent")
95
+
96
+ header_library = nil
97
+ $library_candidates.each {|hdr, libs|
40
98
  header_library = have_all(
41
99
  lambda { have_header(hdr) && hdr },
42
100
  lambda {|h| libs.find {|lib| have_library(lib, "initscr", h) } })
@@ -86,8 +144,8 @@ if header_library
86
144
  # --with-curses-version=function for SVR4
87
145
  # --with-curses-version=variable for ncurses and PDcurses
88
146
  # (not given) automatically determined
89
-
90
- case with_curses_version = with_config("curses-version")
147
+ with_curses_version = with_config("curses-version", $curses_version_default)
148
+ case with_curses_version
91
149
  when "function"
92
150
  $defs << '-DHAVE_FUNC_CURSES_VERSION'
93
151
  when "variable"
@@ -133,33 +191,88 @@ if header_library
133
191
  warn "unexpected value for --with-curses-version: #{with_curses_version}"
134
192
  end
135
193
 
136
- if enable_config("pdcurses-wide")
194
+ if enable_config("pdcurses-wide", $pdcurses_wide_default)
137
195
  $defs << '-DPDC_WIDE'
138
196
  end
139
197
 
140
- if enable_config("pdcurses-dll")
198
+ if enable_config("pdcurses-dll", $pdcurses_dll_default)
141
199
  $defs << '-DPDC_DLL_BUILD'
142
200
  end
143
201
 
144
- if (have_header("ncursesw/menu.h") ||
145
- have_header("ncurses/menu.h") ||
146
- have_header("curses/menu.h") ||
147
- have_header("menu.h")) &&
202
+ if !$use_bundled_pdcurses &&
203
+ (have_header("ncursesw/menu.h") ||
204
+ have_header("ncurses/menu.h") ||
205
+ have_header("curses/menu.h") ||
206
+ have_header("menu.h")) &&
148
207
  (have_library("menuw", "new_menu") ||
149
208
  have_library("menu", "new_menu"))
150
209
  $defs << '-DHAVE_MENU'
151
210
  end
152
211
 
153
- if (have_header("ncursesw/form.h") ||
154
- have_header("ncurses/form.h") ||
155
- have_header("curses/form.h") ||
156
- have_header("form.h")) &&
212
+ if !$use_bundled_pdcurses &&
213
+ (have_header("ncursesw/form.h") ||
214
+ have_header("ncurses/form.h") ||
215
+ have_header("curses/form.h") ||
216
+ have_header("form.h")) &&
157
217
  (have_library("formw", "new_form") ||
158
218
  have_library("form", "new_form"))
159
219
  $defs << '-DHAVE_FORM'
160
220
  have_func("form_driver_w")
161
221
  end
162
222
 
223
+ ["WINDOW", "MEVENT", "ITEM", "MENU", "FIELD", "FORM"].each do |type|
224
+ checking_for("sizeof(#{type}) is available") {
225
+ if try_compile(<<EOF, Shellwords.join($defs))
226
+ #if defined(HAVE_PDCURSES_H)
227
+ # include <pdcurses.h>
228
+ #elif defined(HAVE_NCURSESW_CURSES_H)
229
+ # include <ncursesw/curses.h>
230
+ #elif defined(HAVE_NCURSES_CURSES_H)
231
+ # include <ncurses/curses.h>
232
+ #elif defined(HAVE_NCURSES_H)
233
+ # include <ncurses.h>
234
+ #elif defined(HAVE_CURSES_COLR_CURSES_H)
235
+ # ifdef HAVE_STDARG_PROTOTYPES
236
+ # include <stdarg.h>
237
+ # else
238
+ # include <varargs.h>
239
+ # endif
240
+ # include <curses_colr/curses.h>
241
+ #else
242
+ # include <curses.h>
243
+ #endif
244
+
245
+ #if defined(HAVE_NCURSESW_MENU_H)
246
+ # include <ncursesw/menu.h>
247
+ #elif defined(HAVE_NCURSES_MENU_H)
248
+ # include <ncurses/menu.h>
249
+ #elif defined(HAVE_CURSES_MENU_H)
250
+ # include <curses/menu.h>
251
+ #elif defined(HAVE_MENU_H)
252
+ # include <menu.h>
253
+ #endif
254
+
255
+ #if defined(HAVE_NCURSESW_FORM_H)
256
+ # include <ncursesw/form.h>
257
+ #elif defined(HAVE_NCURSES_FORM_H)
258
+ # include <ncurses/form.h>
259
+ #elif defined(HAVE_CURSES_FORM_H)
260
+ # include <curses/form.h>
261
+ #elif defined(HAVE_FORM_H)
262
+ # include <form.h>
263
+ #endif
264
+
265
+ const int sizeof_#{type} = (int) sizeof(#{type});
266
+ EOF
267
+ $defs << "-DCURSES_SIZEOF_#{type}=sizeof(#{type})"
268
+ true
269
+ else
270
+ $defs << "-DCURSES_SIZEOF_#{type}=0"
271
+ false
272
+ end
273
+ }
274
+ end
275
+
163
276
  if RUBY_VERSION >= '2.1'
164
277
  create_header
165
278
  create_makefile("curses")
data/lib/curses.rb CHANGED
@@ -1,24 +1,17 @@
1
- platform = RUBY_PLATFORM.sub(/i[3-7]86/, "x86")
2
- pdcurses_path = File.expand_path("../vendor/#{platform}/PDCurses", __dir__)
3
- pdcurses_bundled = File.directory?(pdcurses_path)
4
- if pdcurses_bundled
1
+ pdcurses_dll = File.expand_path("../vendor/PDCurses/pdcurses.dll", __dir__)
2
+ if File.exist?(pdcurses_dll)
5
3
  path = ENV["PATH"]
6
4
  dir = File::ALT_SEPARATOR ?
7
- pdcurses_path.tr("/", File::ALT_SEPARATOR) : dir
5
+ File.dirname(pdcurses_dll).tr("/", File::ALT_SEPARATOR) : dir
8
6
  dirs = path.split(File::PATH_SEPARATOR)
9
7
  if !dirs.include?(dir)
10
8
  ENV["PATH"] = [dir, *dirs].join(File::PATH_SEPARATOR)
11
9
  end
12
10
  end
13
11
 
14
- begin
15
- major, minor, _ = RUBY_VERSION.split(/\./)
16
- require "#{major}.#{minor}/curses.so"
17
- rescue LoadError
18
- require "curses.so"
19
- end
12
+ require "curses.so"
20
13
 
21
- if pdcurses_bundled
14
+ if /mingw|mswin/ =~ RUBY_PLATFORM
22
15
  Curses.keyboard_encoding = Encoding::UTF_8
23
16
  end
24
17
 
data/sample/addch.rb ADDED
@@ -0,0 +1,16 @@
1
+ require_relative "../lib/curses"
2
+ include Curses
3
+
4
+ init_screen
5
+ begin
6
+ addstr("The following letter A should be BOLD and UNDERLINED by using addch:\n")
7
+ addch('A'.ord | A_BOLD | A_UNDERLINE)
8
+
9
+ addstr("\nIt should look the same as when using attron and addstr:\n")
10
+ attron(A_BOLD | A_UNDERLINE)
11
+ addstr("A")
12
+ getch
13
+
14
+ ensure
15
+ close_screen
16
+ end
@@ -0,0 +1,32 @@
1
+ require "curses"
2
+ include Curses
3
+
4
+ init_screen
5
+ begin
6
+ attrs = {
7
+ A_NORMAL => 'Normal display (no highlight)',
8
+ A_STANDOUT => 'Best highlighting mode of the terminal',
9
+ A_UNDERLINE => 'Underlining',
10
+ A_REVERSE => 'Reverse video',
11
+ A_BLINK => 'Blinking',
12
+ A_DIM => 'Half bright',
13
+ A_BOLD => 'Extra bright or bold',
14
+ A_PROTECT => 'Protected mode',
15
+ A_INVIS => 'Invisible or blank mode',
16
+ A_ALTCHARSET => 'Alternate character set',
17
+ }
18
+
19
+ longest_description = attrs.values.map(&:size).max
20
+ attrs.each { |attribute, description|
21
+
22
+ attrset(A_NORMAL)
23
+ addstr("#{description.ljust(longest_description)}: ")
24
+
25
+ attrset(attribute)
26
+ addstr([*('a'..'z'), *('0'..'9')].join + "\n")
27
+ }
28
+ getch
29
+
30
+ ensure
31
+ close_screen
32
+ end
data/sample/colors.rb ADDED
@@ -0,0 +1,26 @@
1
+ require "curses"
2
+ include Curses
3
+
4
+ begin
5
+ init_screen
6
+
7
+ if !Curses.has_colors?
8
+ addstr "This Terminal does not support colors!"
9
+ else
10
+ start_color
11
+
12
+ addstr "This Terminal supports #{colors} colors.\n"
13
+
14
+ Curses.colors.times { |i|
15
+ Curses.init_pair(i, i, 0)
16
+ attrset(color_pair(i))
17
+ addstr("#{i.to_s.rjust(3)} ")
18
+ addstr("\n") if i == 15 || (i > 16 && (i - 15) % 36 == 0)
19
+ }
20
+ end
21
+
22
+ getch
23
+
24
+ ensure
25
+ close_screen
26
+ end
data/sample/menu.rb CHANGED
@@ -9,9 +9,9 @@ at_exit do
9
9
  end
10
10
 
11
11
  menu = Curses::Menu.new([
12
- ["Apple", "Red fruit"],
13
- ["Orange", "Orange fruit"],
14
- ["Banana", "Yellow fruit"]
12
+ Curses::Item.new("Apple", "Red fruit"),
13
+ Curses::Item.new("Orange", "Orange fruit"),
14
+ Curses::Item.new("Banana", "Yellow fruit")
15
15
  ])
16
16
  menu.post
17
17
 
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Mouse movement tracking using CSI 1003 and 1006 (SGR). Will print a cursor that moves with the mouse.
4
+ #
5
+
6
+ require "curses"
7
+ include Curses
8
+
9
+ @positions = []
10
+
11
+ def draw_cursor(y, x, button, state)
12
+
13
+ # Keep a trail of 10 previous positions visible on the screen
14
+ if @positions.size >= 10
15
+ y_old, x_old = @positions.shift
16
+ setpos(y_old, x_old)
17
+ addstr(" ")
18
+ end
19
+
20
+ setpos(2, 1)
21
+ addstr("Mouse is at y=#{y.to_s.ljust(3)} x=#{x.to_s.ljust(3)} button=#{button.to_s.ljust(3)} #{'%08b' % button}")
22
+
23
+ setpos(y, x)
24
+ addstr("+")
25
+ @positions << [y, x]
26
+ end
27
+
28
+ init_screen
29
+ crmode
30
+ noecho
31
+ stdscr.box('|', "-")
32
+ setpos(1,1)
33
+ addstr("Please move your mouse. Press 'q' to close.")
34
+
35
+ begin
36
+ # Switch on mouse continous position reporting
37
+ print("\x1b[?1003h")
38
+
39
+ # Also enable SGR extended reporting, because otherwise we can only
40
+ # receive values up to 160x94. Everything else confuses Ruby Curses.
41
+ print("\x1b[?1006h")
42
+
43
+ loop do
44
+ c = get_char
45
+ case c
46
+ when "q"
47
+ return
48
+ when "\e" # ESC
49
+ case get_char
50
+ when '['
51
+ csi = ""
52
+ loop do
53
+ d = get_char
54
+ csi += d
55
+ if d.ord >= 0x40 && d.ord <= 0x7E
56
+ break
57
+ end
58
+ end
59
+ if /<(\d+);(\d+);(\d+)(m|M)/ =~ csi
60
+ button = $1.to_i
61
+ x = $2.to_i
62
+ y = $3.to_i
63
+ state = $4
64
+ draw_cursor(y, x, button, state)
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ ensure
71
+ print("\x1b[?1003l")
72
+ print("\x1b[?1006l")
73
+ close_screen
74
+ end
75
+
@@ -0,0 +1,47 @@
1
+ *.[oa]
2
+ *.exe
3
+ firework
4
+ manext
5
+ libXCurses.so
6
+ ozdemo
7
+ newtest
8
+ ptest
9
+ rain
10
+ sdltest
11
+ testcurs
12
+ tuidemo
13
+ worm
14
+ xmas
15
+ *.sho
16
+ Makefile
17
+ config.h
18
+ config.log
19
+ config.status
20
+ PDCurses.md
21
+ xcurses-config
22
+ *.dll
23
+ wingui.gif
24
+ wingui.htm
25
+ *.bat
26
+ clock.c
27
+ clock1.c
28
+ fullscrn.c
29
+ hello
30
+ hello.c
31
+ wingui/wcr*
32
+ wingui/wct*
33
+ wingui/wc_*
34
+ wingui/wcw*
35
+ wingui/z*
36
+ wingui/scr2html.c
37
+ wingui/newtest*
38
+ wingui/*.sav
39
+ wingui/*.def
40
+ wincon/*.def
41
+ *.obj
42
+ *.bak
43
+ *.map
44
+ *.lib
45
+ m
46
+ .vscode
47
+ build