curses 1.2.6 → 1.4.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 (253) 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 +28 -0
  5. data/.gitmodules +1 -1
  6. data/.travis.yml +6 -3
  7. data/History.md +40 -0
  8. data/README.md +4 -1
  9. data/Rakefile +0 -83
  10. data/curses.gemspec +2 -3
  11. data/ext/curses/curses.c +1271 -151
  12. data/ext/curses/extconf.rb +140 -17
  13. data/lib/curses.rb +5 -12
  14. data/sample/form.rb +52 -0
  15. data/sample/menu.rb +1 -1
  16. data/vendor/PDCurses/.gitignore +47 -0
  17. data/vendor/PDCurses/.travis.yml +49 -0
  18. data/vendor/PDCurses/CMakeLists.txt +68 -0
  19. data/vendor/PDCurses/HISTORY.md +2036 -0
  20. data/vendor/PDCurses/IMPLEMNT.md +327 -0
  21. data/vendor/PDCurses/README.md +77 -0
  22. data/vendor/PDCurses/acs_defs.h +265 -0
  23. data/vendor/PDCurses/appveyor.yml +218 -0
  24. data/vendor/PDCurses/cmake/README.md +71 -0
  25. data/vendor/PDCurses/cmake/build_dependencies.cmake +178 -0
  26. data/vendor/PDCurses/cmake/build_options.cmake +25 -0
  27. data/vendor/PDCurses/cmake/dll_version.cmake +26 -0
  28. data/vendor/PDCurses/cmake/gen_config_header.cmake +43 -0
  29. data/vendor/PDCurses/cmake/get_version.cmake +17 -0
  30. data/vendor/PDCurses/cmake/make_uninstall.cmake +19 -0
  31. data/vendor/PDCurses/cmake/project_common.cmake +121 -0
  32. data/vendor/PDCurses/cmake/resource.in.cmake +52 -0
  33. data/vendor/PDCurses/cmake/sdl2_ttf/CMakeLists.txt +83 -0
  34. data/vendor/PDCurses/cmake/target_arch.cmake +36 -0
  35. data/vendor/PDCurses/cmake/version.in.cmake +73 -0
  36. data/vendor/PDCurses/cmake/watcom_open_dos16_toolchain.cmake +96 -0
  37. data/vendor/PDCurses/cmake/watcom_open_dos32_toolchain.cmake +106 -0
  38. data/vendor/PDCurses/cmake/watcom_open_os2v2_toolchain.cmake +105 -0
  39. data/vendor/PDCurses/curses.h +1846 -0
  40. data/vendor/PDCurses/curspriv.h +134 -0
  41. data/vendor/PDCurses/demos/README.md +25 -0
  42. data/vendor/PDCurses/demos/firework.c +144 -0
  43. data/vendor/PDCurses/demos/newtest.c +581 -0
  44. data/vendor/PDCurses/demos/ozdemo.c +447 -0
  45. data/vendor/PDCurses/demos/ptest.c +283 -0
  46. data/vendor/PDCurses/demos/rain.c +157 -0
  47. data/vendor/PDCurses/demos/testcurs.c +1607 -0
  48. data/vendor/PDCurses/demos/tui.c +1048 -0
  49. data/vendor/PDCurses/demos/tui.h +65 -0
  50. data/vendor/PDCurses/demos/tuidemo.c +233 -0
  51. data/vendor/PDCurses/demos/version.c +61 -0
  52. data/vendor/PDCurses/demos/worm.c +432 -0
  53. data/vendor/PDCurses/demos/xmas.c +955 -0
  54. data/vendor/PDCurses/dos/CMakeLists.txt +47 -0
  55. data/vendor/PDCurses/dos/Makefile.bcc +83 -0
  56. data/vendor/PDCurses/dos/Makefile.dmc +257 -0
  57. data/vendor/PDCurses/dos/Makefile.msc +113 -0
  58. data/vendor/PDCurses/dos/Makefile.wcc +107 -0
  59. data/vendor/PDCurses/dos/README.md +51 -0
  60. data/vendor/PDCurses/dos/bccdos.lrf +9 -0
  61. data/vendor/PDCurses/dos/mscdos.lrf +50 -0
  62. data/vendor/PDCurses/dos/pdcclip.c +132 -0
  63. data/vendor/PDCurses/dos/pdcdisp.c +135 -0
  64. data/vendor/PDCurses/dos/pdcdos.h +194 -0
  65. data/vendor/PDCurses/dos/pdcgetsc.c +98 -0
  66. data/vendor/PDCurses/dos/pdckbd.c +513 -0
  67. data/vendor/PDCurses/dos/pdcscrn.c +785 -0
  68. data/vendor/PDCurses/dos/pdcsetsc.c +101 -0
  69. data/vendor/PDCurses/dos/pdcutil.c +212 -0
  70. data/vendor/PDCurses/libobjs.mif +26 -0
  71. data/vendor/PDCurses/makedist.mif +20 -0
  72. data/vendor/PDCurses/man/README.md +21 -0
  73. data/vendor/PDCurses/man/intro.md +361 -0
  74. data/vendor/PDCurses/man/manext.c +119 -0
  75. data/vendor/PDCurses/man/sdl.md +152 -0
  76. data/vendor/PDCurses/man/sdl2.md +58 -0
  77. data/vendor/PDCurses/man/x11.md +407 -0
  78. data/vendor/PDCurses/ncurses/CMakeLists.txt +66 -0
  79. data/vendor/PDCurses/ncurses/README.md +26 -0
  80. data/vendor/PDCurses/ncurses/makefile +29 -0
  81. data/vendor/PDCurses/os2/CMakeLists.txt +41 -0
  82. data/vendor/PDCurses/os2/Makefile.bcc +90 -0
  83. data/vendor/PDCurses/os2/Makefile.wcc +43 -0
  84. data/vendor/PDCurses/os2/README.md +43 -0
  85. data/vendor/PDCurses/os2/iccos2.lrf +50 -0
  86. data/vendor/PDCurses/os2/iccos2.mak +256 -0
  87. data/vendor/PDCurses/os2/pdcclip.c +188 -0
  88. data/vendor/PDCurses/os2/pdcdisp.c +93 -0
  89. data/vendor/PDCurses/os2/pdcgetsc.c +89 -0
  90. data/vendor/PDCurses/os2/pdckbd.c +521 -0
  91. data/vendor/PDCurses/os2/pdcos2.h +55 -0
  92. data/vendor/PDCurses/os2/pdcscrn.c +449 -0
  93. data/vendor/PDCurses/os2/pdcsetsc.c +112 -0
  94. data/vendor/PDCurses/os2/pdcutil.c +52 -0
  95. data/vendor/PDCurses/panel.h +56 -0
  96. data/vendor/PDCurses/pdcurses/README.md +25 -0
  97. data/vendor/PDCurses/pdcurses/addch.c +693 -0
  98. data/vendor/PDCurses/pdcurses/addchstr.c +245 -0
  99. data/vendor/PDCurses/pdcurses/addstr.c +240 -0
  100. data/vendor/PDCurses/pdcurses/attr.c +359 -0
  101. data/vendor/PDCurses/pdcurses/beep.c +68 -0
  102. data/vendor/PDCurses/pdcurses/bkgd.c +223 -0
  103. data/vendor/PDCurses/pdcurses/border.c +411 -0
  104. data/vendor/PDCurses/pdcurses/clear.c +159 -0
  105. data/vendor/PDCurses/pdcurses/color.c +298 -0
  106. data/vendor/PDCurses/pdcurses/debug.c +109 -0
  107. data/vendor/PDCurses/pdcurses/delch.c +96 -0
  108. data/vendor/PDCurses/pdcurses/deleteln.c +211 -0
  109. data/vendor/PDCurses/pdcurses/deprec.c +27 -0
  110. data/vendor/PDCurses/pdcurses/getch.c +417 -0
  111. data/vendor/PDCurses/pdcurses/getstr.c +474 -0
  112. data/vendor/PDCurses/pdcurses/getyx.c +139 -0
  113. data/vendor/PDCurses/pdcurses/inch.c +127 -0
  114. data/vendor/PDCurses/pdcurses/inchstr.c +214 -0
  115. data/vendor/PDCurses/pdcurses/initscr.c +367 -0
  116. data/vendor/PDCurses/pdcurses/inopts.c +324 -0
  117. data/vendor/PDCurses/pdcurses/insch.c +271 -0
  118. data/vendor/PDCurses/pdcurses/insstr.c +264 -0
  119. data/vendor/PDCurses/pdcurses/instr.c +246 -0
  120. data/vendor/PDCurses/pdcurses/kernel.c +259 -0
  121. data/vendor/PDCurses/pdcurses/keyname.c +157 -0
  122. data/vendor/PDCurses/pdcurses/mouse.c +438 -0
  123. data/vendor/PDCurses/pdcurses/move.c +57 -0
  124. data/vendor/PDCurses/pdcurses/outopts.c +159 -0
  125. data/vendor/PDCurses/pdcurses/overlay.c +214 -0
  126. data/vendor/PDCurses/pdcurses/pad.c +260 -0
  127. data/vendor/PDCurses/pdcurses/panel.c +633 -0
  128. data/vendor/PDCurses/pdcurses/printw.c +126 -0
  129. data/vendor/PDCurses/pdcurses/refresh.c +279 -0
  130. data/vendor/PDCurses/pdcurses/scanw.c +578 -0
  131. data/vendor/PDCurses/pdcurses/scr_dump.c +213 -0
  132. data/vendor/PDCurses/pdcurses/scroll.c +101 -0
  133. data/vendor/PDCurses/pdcurses/slk.c +591 -0
  134. data/vendor/PDCurses/pdcurses/termattr.c +182 -0
  135. data/vendor/PDCurses/pdcurses/terminfo.c +217 -0
  136. data/vendor/PDCurses/pdcurses/touch.c +163 -0
  137. data/vendor/PDCurses/pdcurses/util.c +312 -0
  138. data/vendor/PDCurses/pdcurses/window.c +569 -0
  139. data/vendor/PDCurses/sdl1/Makefile.mng +110 -0
  140. data/vendor/PDCurses/sdl1/README.md +31 -0
  141. data/vendor/PDCurses/sdl1/deffont.h +385 -0
  142. data/vendor/PDCurses/sdl1/deficon.h +23 -0
  143. data/vendor/PDCurses/sdl1/pdcclip.c +131 -0
  144. data/vendor/PDCurses/sdl1/pdcdisp.c +373 -0
  145. data/vendor/PDCurses/sdl1/pdcgetsc.c +30 -0
  146. data/vendor/PDCurses/sdl1/pdckbd.c +405 -0
  147. data/vendor/PDCurses/sdl1/pdcscrn.c +414 -0
  148. data/vendor/PDCurses/sdl1/pdcsdl.h +31 -0
  149. data/vendor/PDCurses/sdl1/pdcsetsc.c +64 -0
  150. data/vendor/PDCurses/sdl1/pdcutil.c +40 -0
  151. data/vendor/PDCurses/sdl1/sdltest.c +79 -0
  152. data/vendor/PDCurses/sdl2/CMakeLists.txt +76 -0
  153. data/vendor/PDCurses/sdl2/Makefile.vc +164 -0
  154. data/vendor/PDCurses/sdl2/README.md +34 -0
  155. data/vendor/PDCurses/sdl2/deffont.h +385 -0
  156. data/vendor/PDCurses/sdl2/deficon.h +23 -0
  157. data/vendor/PDCurses/sdl2/pdcclip.c +93 -0
  158. data/vendor/PDCurses/sdl2/pdcdisp.c +534 -0
  159. data/vendor/PDCurses/sdl2/pdcgetsc.c +30 -0
  160. data/vendor/PDCurses/sdl2/pdckbd.c +480 -0
  161. data/vendor/PDCurses/sdl2/pdcscrn.c +443 -0
  162. data/vendor/PDCurses/sdl2/pdcsdl.h +33 -0
  163. data/vendor/PDCurses/sdl2/pdcsetsc.c +67 -0
  164. data/vendor/PDCurses/sdl2/pdcutil.c +39 -0
  165. data/vendor/PDCurses/sdl2/sdltest.c +81 -0
  166. data/vendor/PDCurses/term.h +48 -0
  167. data/vendor/PDCurses/version.mif +7 -0
  168. data/vendor/PDCurses/vt/CMakeLists.txt +28 -0
  169. data/vendor/PDCurses/vt/Makefile.bcc +111 -0
  170. data/vendor/PDCurses/vt/Makefile.dmc +258 -0
  171. data/vendor/PDCurses/vt/Makefile.vc +144 -0
  172. data/vendor/PDCurses/vt/Makefile.wcc +107 -0
  173. data/vendor/PDCurses/vt/README.md +64 -0
  174. data/vendor/PDCurses/vt/pdcclip.c +20 -0
  175. data/vendor/PDCurses/vt/pdcdisp.c +284 -0
  176. data/vendor/PDCurses/vt/pdcgetsc.c +27 -0
  177. data/vendor/PDCurses/vt/pdckbd.c +394 -0
  178. data/vendor/PDCurses/vt/pdcscrn.c +434 -0
  179. data/vendor/PDCurses/vt/pdcsetsc.c +45 -0
  180. data/vendor/PDCurses/vt/pdcutil.c +43 -0
  181. data/vendor/PDCurses/vt/pdcvt.h +16 -0
  182. data/vendor/PDCurses/watcom.mif +68 -0
  183. data/vendor/PDCurses/wincon/CMakeLists.txt +27 -0
  184. data/vendor/PDCurses/wincon/Makefile.bcc +88 -0
  185. data/vendor/PDCurses/wincon/Makefile.dmc +256 -0
  186. data/vendor/PDCurses/wincon/Makefile.lcc +273 -0
  187. data/vendor/PDCurses/wincon/Makefile.mng +176 -0
  188. data/vendor/PDCurses/wincon/Makefile.vc +144 -0
  189. data/vendor/PDCurses/wincon/Makefile.wcc +51 -0
  190. data/vendor/PDCurses/wincon/README.md +85 -0
  191. data/vendor/PDCurses/wincon/pdcclip.c +174 -0
  192. data/vendor/PDCurses/wincon/pdcdisp.c +143 -0
  193. data/vendor/PDCurses/wincon/pdcgetsc.c +55 -0
  194. data/vendor/PDCurses/wincon/pdckbd.c +786 -0
  195. data/vendor/PDCurses/wincon/pdcscrn.c +717 -0
  196. data/vendor/PDCurses/wincon/pdcsetsc.c +91 -0
  197. data/vendor/PDCurses/wincon/pdcurses.ico +0 -0
  198. data/vendor/PDCurses/wincon/pdcurses.rc +28 -0
  199. data/vendor/PDCurses/wincon/pdcutil.c +41 -0
  200. data/vendor/PDCurses/wincon/pdcwin.h +31 -0
  201. data/vendor/PDCurses/wingui/CMakeLists.txt +27 -0
  202. data/vendor/PDCurses/wingui/Makefile.bcc +85 -0
  203. data/vendor/PDCurses/wingui/Makefile.dmc +259 -0
  204. data/vendor/PDCurses/wingui/Makefile.lcc +273 -0
  205. data/vendor/PDCurses/wingui/Makefile.mng +171 -0
  206. data/vendor/PDCurses/wingui/Makefile.vc +144 -0
  207. data/vendor/PDCurses/wingui/Makefile.wcc +51 -0
  208. data/vendor/PDCurses/wingui/README.md +93 -0
  209. data/vendor/PDCurses/wingui/pdcclip.c +174 -0
  210. data/vendor/PDCurses/wingui/pdcdisp.c +718 -0
  211. data/vendor/PDCurses/wingui/pdcgetsc.c +30 -0
  212. data/vendor/PDCurses/wingui/pdckbd.c +143 -0
  213. data/vendor/PDCurses/wingui/pdcscrn.c +2797 -0
  214. data/vendor/PDCurses/wingui/pdcsetsc.c +89 -0
  215. data/vendor/PDCurses/wingui/pdcurses.ico +0 -0
  216. data/vendor/PDCurses/wingui/pdcurses.rc +28 -0
  217. data/vendor/PDCurses/wingui/pdcutil.c +61 -0
  218. data/vendor/PDCurses/wingui/pdcwin.h +122 -0
  219. data/vendor/PDCurses/x11/Makefile.in +754 -0
  220. data/vendor/PDCurses/x11/PDCurses.spec +82 -0
  221. data/vendor/PDCurses/x11/README.md +62 -0
  222. data/vendor/PDCurses/x11/ScrollBox.c +319 -0
  223. data/vendor/PDCurses/x11/ScrollBox.h +51 -0
  224. data/vendor/PDCurses/x11/ScrollBoxP.h +70 -0
  225. data/vendor/PDCurses/x11/aclocal.m4 +994 -0
  226. data/vendor/PDCurses/x11/big_icon.xbm +46 -0
  227. data/vendor/PDCurses/x11/compose.h +201 -0
  228. data/vendor/PDCurses/x11/config.guess +1500 -0
  229. data/vendor/PDCurses/x11/config.h.in +100 -0
  230. data/vendor/PDCurses/x11/config.sub +1616 -0
  231. data/vendor/PDCurses/x11/configure +6700 -0
  232. data/vendor/PDCurses/x11/configure.ac +295 -0
  233. data/vendor/PDCurses/x11/debian/changelog +6 -0
  234. data/vendor/PDCurses/x11/debian/compat +1 -0
  235. data/vendor/PDCurses/x11/debian/control +11 -0
  236. data/vendor/PDCurses/x11/debian/copyright +27 -0
  237. data/vendor/PDCurses/x11/debian/rules +98 -0
  238. data/vendor/PDCurses/x11/install-sh +253 -0
  239. data/vendor/PDCurses/x11/little_icon.xbm +14 -0
  240. data/vendor/PDCurses/x11/ncurses_cfg.h +45 -0
  241. data/vendor/PDCurses/x11/pdcclip.c +173 -0
  242. data/vendor/PDCurses/x11/pdcdisp.c +85 -0
  243. data/vendor/PDCurses/x11/pdcgetsc.c +28 -0
  244. data/vendor/PDCurses/x11/pdckbd.c +104 -0
  245. data/vendor/PDCurses/x11/pdcscrn.c +258 -0
  246. data/vendor/PDCurses/x11/pdcsetsc.c +95 -0
  247. data/vendor/PDCurses/x11/pdcutil.c +52 -0
  248. data/vendor/PDCurses/x11/pdcx11.c +316 -0
  249. data/vendor/PDCurses/x11/pdcx11.h +191 -0
  250. data/vendor/PDCurses/x11/sb.c +155 -0
  251. data/vendor/PDCurses/x11/x11.c +3686 -0
  252. data/vendor/PDCurses/x11/xcurses-config.in +81 -0
  253. metadata +255 -21
@@ -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,23 +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
 
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")) &&
217
+ (have_library("formw", "new_form") ||
218
+ have_library("form", "new_form"))
219
+ $defs << '-DHAVE_FORM'
220
+ have_func("form_driver_w")
221
+ end
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
+
153
276
  if RUBY_VERSION >= '2.1'
154
277
  create_header
155
278
  create_makefile("curses")
@@ -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
 
@@ -0,0 +1,52 @@
1
+ require "curses"
2
+
3
+ Curses.init_screen
4
+ Curses.cbreak
5
+ Curses.noecho
6
+ Curses.stdscr.keypad = true
7
+ at_exit do
8
+ Curses.close_screen
9
+ end
10
+
11
+ fields = [
12
+ Curses::Field.new(1, 10, 4, 18, 0, 0),
13
+ Curses::Field.new(1, 10, 6, 18, 0, 0)
14
+ ]
15
+ fields.each do |field|
16
+ field.set_back(Curses::A_UNDERLINE)
17
+ field.opts_off(Curses::O_AUTOSKIP)
18
+ end
19
+
20
+ form = Curses::Form.new(fields)
21
+ form.post
22
+
23
+ Curses.setpos(4, 10)
24
+ Curses.addstr("Value 1:")
25
+ Curses.setpos(6, 10)
26
+ Curses.addstr("Value 2:")
27
+
28
+ while ch = Curses.get_char
29
+ begin
30
+ case ch
31
+ when Curses::KEY_F1
32
+ break
33
+ when Curses::KEY_DOWN
34
+ form.driver(Curses::REQ_NEXT_FIELD)
35
+ form.driver(Curses::REQ_END_LINE)
36
+ when Curses::KEY_UP
37
+ form.driver(Curses::REQ_PREV_FIELD)
38
+ form.driver(Curses::REQ_END_LINE)
39
+ when Curses::KEY_RIGHT
40
+ form.driver(Curses::REQ_NEXT_CHAR)
41
+ when Curses::KEY_LEFT
42
+ form.driver(Curses::REQ_PREV_CHAR)
43
+ when Curses::KEY_BACKSPACE
44
+ form.driver(Curses::REQ_DEL_PREV)
45
+ else
46
+ form.driver(ch)
47
+ end
48
+ rescue Curses::RequestDeniedError
49
+ end
50
+ end
51
+
52
+ form.unpost
@@ -5,7 +5,7 @@ Curses.cbreak
5
5
  Curses.noecho
6
6
  Curses.stdscr.keypad = true
7
7
  at_exit do
8
- Curses.cloes_screen
8
+ Curses.close_screen
9
9
  end
10
10
 
11
11
  menu = Curses::Menu.new([
@@ -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
@@ -0,0 +1,49 @@
1
+ language: c
2
+
3
+ os:
4
+ - linux
5
+ - osx
6
+
7
+ compiler:
8
+ - gcc
9
+ - clang
10
+
11
+ env:
12
+ - BUILD_TYPE=Debug CMAKE_ARGS="-DPDC_WIDE=OFF -DPDC_UTF8=OFF -DPDCDEBUG=ON"
13
+ - BUILD_TYPE=Debug CMAKE_ARGS="-DPDC_WIDE=OFF -DPDC_UTF8=ON -DPDCDEBUG=ON"
14
+ - BUILD_TYPE=Debug CMAKE_ARGS="-DPDC_WIDE=ON -DPDC_UTF8=OFF -DPDCDEBUG=ON"
15
+
16
+ - BUILD_TYPE=Release CMAKE_ARGS="-DPDC_WIDE=OFF -DPDC_UTF8=OFF"
17
+ - BUILD_TYPE=Release CMAKE_ARGS="-DPDC_WIDE=OFF -DPDC_UTF8=ON"
18
+ - BUILD_TYPE=Release CMAKE_ARGS="-DPDC_WIDE=ON -DPDC_UTF8=OFF"
19
+
20
+ - BUILD_TYPE=MinSizeRel CMAKE_ARGS="-DPDC_WIDE=OFF -DPDC_UTF8=OFF"
21
+ - BUILD_TYPE=MinSizeRel CMAKE_ARGS="-DPDC_WIDE=OFF -DPDC_UTF8=ON"
22
+ - BUILD_TYPE=MinSizeRel CMAKE_ARGS="-DPDC_WIDE=ON -DPDC_UTF8=OFF"
23
+
24
+ addons:
25
+ apt:
26
+ packages:
27
+ - libncurses5-dev
28
+ - libncursesw5-dev
29
+ - libxaw7-dev
30
+
31
+ install:
32
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"; fi
33
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then mkdir ${DEPS_DIR} && cd ${DEPS_DIR} && pwd; fi
34
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then travis_retry wget --no-check-certificate https://cmake.org/files/v3.11/cmake-3.11.0-Linux-x86_64.tar.gz; fi
35
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo "96d67e21f0983ebf0fffc5b106ec338c *cmake-3.11.0-Linux-x86_64.tar.gz" > cmake_md5.txt; fi
36
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then md5sum -c cmake_md5.txt; fi
37
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then tar -xvf cmake-3.11.0-Linux-x86_64.tar.gz > /dev/null; fi
38
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then mv cmake-3.11.0-Linux-x86_64 cmake-install; fi
39
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then PATH=${DEPS_DIR}/cmake-install:${DEPS_DIR}/cmake-install/bin:$PATH; fi
40
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install ncurses; fi
41
+
42
+ before_script:
43
+ - cd ${TRAVIS_BUILD_DIR}
44
+ - mkdir build && cd build
45
+ - cmake -DCMAKE_VERBOSE_MAKEFILE=FALSE -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
46
+ -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/build/dist ${CMAKE_ARGS}
47
+ ..
48
+ script:
49
+ - cmake --build . --config ${BUILD_TYPE} --target install
@@ -0,0 +1,68 @@
1
+ cmake_minimum_required(VERSION 3.11)
2
+
3
+ if(NOT CMAKE_BUILD_TYPE)
4
+ set(CMAKE_BUILD_TYPE "MinSizeRel" CACHE STRING "Choose the type of build, options are: Debug, Release, or MinSizeRel." FORCE)
5
+ message(STATUS "CMAKE_BUILD_TYPE not set, defaulting to MinSizeRel.")
6
+ endif()
7
+
8
+ set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_SOURCE_DIR}/cmake")
9
+
10
+ include (get_version)
11
+
12
+ if(MSVC)
13
+ set(CMAKE_DEBUG_POSTFIX d)
14
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") # enable parallel builds
15
+ endif()
16
+
17
+ message(STATUS "Generator .............. ${CMAKE_GENERATOR}")
18
+ message(STATUS "Build Type ............. ${CMAKE_BUILD_TYPE}")
19
+
20
+ include(build_options)
21
+ include(build_dependencies)
22
+
23
+ project(pdcurses VERSION "${CURSES_VERSION}" LANGUAGES C)
24
+ message(STATUS "PDC Version ............ ${PROJECT_VERSION}")
25
+
26
+ include(gen_config_header)
27
+
28
+ file(GLOB pdcurses_src_files pdcurses/*.c)
29
+
30
+ if(CYGWIN)
31
+ message(STATUS "Windows Kit UM lib path = ${WINDOWS_KIT_LIBRARY_DIR}")
32
+ link_directories(${WINDOWS_KIT_LIBRARY_DIR})
33
+ endif()
34
+
35
+ if(PDC_DOS_BUILD) # currently requires a unique toolchain file
36
+
37
+ add_subdirectory(dos)
38
+
39
+ elseif(PDC_OS2_BUILD) # currently requires a unique toolchain file
40
+
41
+ add_subdirectory(os2)
42
+
43
+ else()
44
+
45
+ add_subdirectory(ncurses)
46
+
47
+ if(PDC_SDL2_BUILD)
48
+
49
+ add_subdirectory(sdl2)
50
+
51
+ endif()
52
+
53
+ if(UNIX)
54
+ add_subdirectory(vt)
55
+ endif()
56
+
57
+ if(WIN32)
58
+
59
+ add_subdirectory(wincon)
60
+ add_subdirectory(wingui)
61
+
62
+ endif()
63
+
64
+ endif()
65
+
66
+ add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_SOURCE_DIR}/cmake/make_uninstall.cmake")
67
+
68
+ set(CPACK_COMPONENTS_ALL applications)