curses 1.4.6 → 1.5.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 (254) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/push_gem.yml +6 -4
  3. data/README.md +8 -1
  4. data/curses.gemspec +2 -2
  5. data/ext/curses/curses.c +188 -12
  6. data/ext/curses/extconf.rb +3 -2
  7. data/lib/curses.rb +7 -0
  8. data/sample/attr_demo.rb +4 -2
  9. data/sample/screen.rb +9 -0
  10. data/vendor/PDCurses/.gitignore +47 -0
  11. data/vendor/PDCurses/.travis.yml +49 -0
  12. data/vendor/PDCurses/CMakeLists.txt +68 -0
  13. data/vendor/PDCurses/HISTORY.md +2036 -0
  14. data/vendor/PDCurses/IMPLEMNT.md +327 -0
  15. data/vendor/PDCurses/Makefile +27 -0
  16. data/vendor/PDCurses/README.md +77 -0
  17. data/vendor/PDCurses/acs_defs.h +265 -0
  18. data/vendor/PDCurses/appveyor.yml +218 -0
  19. data/vendor/PDCurses/cmake/README.md +71 -0
  20. data/vendor/PDCurses/cmake/build_dependencies.cmake +178 -0
  21. data/vendor/PDCurses/cmake/build_options.cmake +25 -0
  22. data/vendor/PDCurses/cmake/dll_version.cmake +26 -0
  23. data/vendor/PDCurses/cmake/gen_config_header.cmake +43 -0
  24. data/vendor/PDCurses/cmake/get_version.cmake +17 -0
  25. data/vendor/PDCurses/cmake/make_uninstall.cmake +19 -0
  26. data/vendor/PDCurses/cmake/project_common.cmake +121 -0
  27. data/vendor/PDCurses/cmake/resource.in.cmake +52 -0
  28. data/vendor/PDCurses/cmake/sdl2_ttf/CMakeLists.txt +83 -0
  29. data/vendor/PDCurses/cmake/target_arch.cmake +36 -0
  30. data/vendor/PDCurses/cmake/version.in.cmake +73 -0
  31. data/vendor/PDCurses/cmake/watcom_open_dos16_toolchain.cmake +96 -0
  32. data/vendor/PDCurses/cmake/watcom_open_dos32_toolchain.cmake +106 -0
  33. data/vendor/PDCurses/cmake/watcom_open_os2v2_toolchain.cmake +105 -0
  34. data/vendor/PDCurses/curses.h +1846 -0
  35. data/vendor/PDCurses/curspriv.h +134 -0
  36. data/vendor/PDCurses/demos/README.md +25 -0
  37. data/vendor/PDCurses/demos/firework.c +144 -0
  38. data/vendor/PDCurses/demos/newtest.c +581 -0
  39. data/vendor/PDCurses/demos/ozdemo.c +447 -0
  40. data/vendor/PDCurses/demos/ptest.c +283 -0
  41. data/vendor/PDCurses/demos/rain.c +157 -0
  42. data/vendor/PDCurses/demos/testcurs.c +1607 -0
  43. data/vendor/PDCurses/demos/tui.c +1048 -0
  44. data/vendor/PDCurses/demos/tui.h +65 -0
  45. data/vendor/PDCurses/demos/tuidemo.c +233 -0
  46. data/vendor/PDCurses/demos/version.c +61 -0
  47. data/vendor/PDCurses/demos/worm.c +432 -0
  48. data/vendor/PDCurses/demos/xmas.c +955 -0
  49. data/vendor/PDCurses/dos/CMakeLists.txt +47 -0
  50. data/vendor/PDCurses/dos/Makefile +105 -0
  51. data/vendor/PDCurses/dos/Makefile.bcc +83 -0
  52. data/vendor/PDCurses/dos/Makefile.dmc +257 -0
  53. data/vendor/PDCurses/dos/Makefile.msc +113 -0
  54. data/vendor/PDCurses/dos/Makefile.wcc +107 -0
  55. data/vendor/PDCurses/dos/README.md +51 -0
  56. data/vendor/PDCurses/dos/bccdos.lrf +9 -0
  57. data/vendor/PDCurses/dos/mscdos.lrf +50 -0
  58. data/vendor/PDCurses/dos/pdcclip.c +132 -0
  59. data/vendor/PDCurses/dos/pdcdisp.c +135 -0
  60. data/vendor/PDCurses/dos/pdcdos.h +194 -0
  61. data/vendor/PDCurses/dos/pdcgetsc.c +98 -0
  62. data/vendor/PDCurses/dos/pdckbd.c +513 -0
  63. data/vendor/PDCurses/dos/pdcscrn.c +785 -0
  64. data/vendor/PDCurses/dos/pdcsetsc.c +101 -0
  65. data/vendor/PDCurses/dos/pdcutil.c +212 -0
  66. data/vendor/PDCurses/libobjs.mif +26 -0
  67. data/vendor/PDCurses/makedist.mif +20 -0
  68. data/vendor/PDCurses/man/Makefile +37 -0
  69. data/vendor/PDCurses/man/README.md +21 -0
  70. data/vendor/PDCurses/man/intro.md +361 -0
  71. data/vendor/PDCurses/man/manext.c +119 -0
  72. data/vendor/PDCurses/man/sdl.md +152 -0
  73. data/vendor/PDCurses/man/sdl2.md +58 -0
  74. data/vendor/PDCurses/man/x11.md +407 -0
  75. data/vendor/PDCurses/ncurses/CMakeLists.txt +66 -0
  76. data/vendor/PDCurses/ncurses/README.md +26 -0
  77. data/vendor/PDCurses/ncurses/makefile +29 -0
  78. data/vendor/PDCurses/os2/CMakeLists.txt +41 -0
  79. data/vendor/PDCurses/os2/Makefile +132 -0
  80. data/vendor/PDCurses/os2/Makefile.bcc +90 -0
  81. data/vendor/PDCurses/os2/Makefile.wcc +43 -0
  82. data/vendor/PDCurses/os2/README.md +43 -0
  83. data/vendor/PDCurses/os2/iccos2.lrf +50 -0
  84. data/vendor/PDCurses/os2/iccos2.mak +256 -0
  85. data/vendor/PDCurses/os2/pdcclip.c +188 -0
  86. data/vendor/PDCurses/os2/pdcdisp.c +93 -0
  87. data/vendor/PDCurses/os2/pdcgetsc.c +89 -0
  88. data/vendor/PDCurses/os2/pdckbd.c +521 -0
  89. data/vendor/PDCurses/os2/pdcos2.h +55 -0
  90. data/vendor/PDCurses/os2/pdcscrn.c +449 -0
  91. data/vendor/PDCurses/os2/pdcsetsc.c +112 -0
  92. data/vendor/PDCurses/os2/pdcutil.c +52 -0
  93. data/vendor/PDCurses/panel.h +56 -0
  94. data/vendor/PDCurses/pdcurses/README.md +25 -0
  95. data/vendor/PDCurses/pdcurses/addch.c +693 -0
  96. data/vendor/PDCurses/pdcurses/addchstr.c +245 -0
  97. data/vendor/PDCurses/pdcurses/addstr.c +240 -0
  98. data/vendor/PDCurses/pdcurses/attr.c +359 -0
  99. data/vendor/PDCurses/pdcurses/beep.c +68 -0
  100. data/vendor/PDCurses/pdcurses/bkgd.c +223 -0
  101. data/vendor/PDCurses/pdcurses/border.c +411 -0
  102. data/vendor/PDCurses/pdcurses/clear.c +159 -0
  103. data/vendor/PDCurses/pdcurses/color.c +298 -0
  104. data/vendor/PDCurses/pdcurses/debug.c +109 -0
  105. data/vendor/PDCurses/pdcurses/delch.c +96 -0
  106. data/vendor/PDCurses/pdcurses/deleteln.c +211 -0
  107. data/vendor/PDCurses/pdcurses/deprec.c +27 -0
  108. data/vendor/PDCurses/pdcurses/getch.c +417 -0
  109. data/vendor/PDCurses/pdcurses/getstr.c +474 -0
  110. data/vendor/PDCurses/pdcurses/getyx.c +139 -0
  111. data/vendor/PDCurses/pdcurses/inch.c +127 -0
  112. data/vendor/PDCurses/pdcurses/inchstr.c +214 -0
  113. data/vendor/PDCurses/pdcurses/initscr.c +367 -0
  114. data/vendor/PDCurses/pdcurses/inopts.c +324 -0
  115. data/vendor/PDCurses/pdcurses/insch.c +271 -0
  116. data/vendor/PDCurses/pdcurses/insstr.c +264 -0
  117. data/vendor/PDCurses/pdcurses/instr.c +246 -0
  118. data/vendor/PDCurses/pdcurses/kernel.c +259 -0
  119. data/vendor/PDCurses/pdcurses/keyname.c +157 -0
  120. data/vendor/PDCurses/pdcurses/mouse.c +438 -0
  121. data/vendor/PDCurses/pdcurses/move.c +57 -0
  122. data/vendor/PDCurses/pdcurses/outopts.c +159 -0
  123. data/vendor/PDCurses/pdcurses/overlay.c +214 -0
  124. data/vendor/PDCurses/pdcurses/pad.c +260 -0
  125. data/vendor/PDCurses/pdcurses/panel.c +633 -0
  126. data/vendor/PDCurses/pdcurses/printw.c +126 -0
  127. data/vendor/PDCurses/pdcurses/refresh.c +279 -0
  128. data/vendor/PDCurses/pdcurses/scanw.c +578 -0
  129. data/vendor/PDCurses/pdcurses/scr_dump.c +213 -0
  130. data/vendor/PDCurses/pdcurses/scroll.c +101 -0
  131. data/vendor/PDCurses/pdcurses/slk.c +591 -0
  132. data/vendor/PDCurses/pdcurses/termattr.c +182 -0
  133. data/vendor/PDCurses/pdcurses/terminfo.c +217 -0
  134. data/vendor/PDCurses/pdcurses/touch.c +163 -0
  135. data/vendor/PDCurses/pdcurses/util.c +312 -0
  136. data/vendor/PDCurses/pdcurses/window.c +569 -0
  137. data/vendor/PDCurses/sdl1/Makefile +129 -0
  138. data/vendor/PDCurses/sdl1/Makefile.mng +110 -0
  139. data/vendor/PDCurses/sdl1/README.md +31 -0
  140. data/vendor/PDCurses/sdl1/deffont.h +385 -0
  141. data/vendor/PDCurses/sdl1/deficon.h +23 -0
  142. data/vendor/PDCurses/sdl1/pdcclip.c +131 -0
  143. data/vendor/PDCurses/sdl1/pdcdisp.c +373 -0
  144. data/vendor/PDCurses/sdl1/pdcgetsc.c +30 -0
  145. data/vendor/PDCurses/sdl1/pdckbd.c +405 -0
  146. data/vendor/PDCurses/sdl1/pdcscrn.c +414 -0
  147. data/vendor/PDCurses/sdl1/pdcsdl.h +31 -0
  148. data/vendor/PDCurses/sdl1/pdcsetsc.c +64 -0
  149. data/vendor/PDCurses/sdl1/pdcutil.c +40 -0
  150. data/vendor/PDCurses/sdl1/sdltest.c +79 -0
  151. data/vendor/PDCurses/sdl2/CMakeLists.txt +76 -0
  152. data/vendor/PDCurses/sdl2/Makefile +135 -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 +135 -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 +249 -8
@@ -0,0 +1,95 @@
1
+ /* Public Domain Curses */
2
+
3
+ #include "pdcx11.h"
4
+
5
+ #include <string.h>
6
+
7
+ /*man-start**************************************************************
8
+
9
+ pdcsetsc
10
+ --------
11
+
12
+ ### Synopsis
13
+
14
+ int PDC_set_blink(bool blinkon);
15
+ void PDC_set_title(const char *title);
16
+
17
+ ### Description
18
+
19
+ PDC_set_blink() toggles whether the A_BLINK attribute sets an
20
+ actual blink mode (TRUE), or sets the background color to high
21
+ intensity (FALSE). The default is platform-dependent (FALSE in
22
+ most cases). It returns OK if it could set the state to match
23
+ the given parameter, ERR otherwise. Current platforms also
24
+ adjust the value of COLORS according to this function -- 16 for
25
+ FALSE, and 8 for TRUE.
26
+
27
+ PDC_set_title() sets the title of the window in which the curses
28
+ program is running. This function may not do anything on some
29
+ platforms. (Currently it only works in Win32 and X11.)
30
+
31
+ ### Portability
32
+ X/Open BSD SYS V
33
+ PDC_set_blink - - -
34
+ PDC_set_title - - -
35
+
36
+ **man-end****************************************************************/
37
+
38
+ int PDC_curs_set(int visibility)
39
+ {
40
+ int ret_vis = SP->visibility;
41
+
42
+ PDC_LOG(("PDC_curs_set() - called: visibility=%d\n", visibility));
43
+
44
+ if (visibility != -1)
45
+ SP->visibility = visibility;
46
+
47
+ PDC_display_cursor(SP->cursrow, SP->curscol, SP->cursrow,
48
+ SP->curscol, visibility);
49
+
50
+ return ret_vis;
51
+ }
52
+
53
+ void PDC_set_title(const char *title)
54
+ {
55
+ int len;
56
+
57
+ PDC_LOG(("PDC_set_title() - called:<%s>\n", title));
58
+
59
+ len = strlen(title) + 1; /* write nul character */
60
+
61
+ XCursesInstruct(CURSES_TITLE);
62
+
63
+ if (XC_write_display_socket_int(len) >= 0)
64
+ if (XC_write_socket(xc_display_sock, title, len) >= 0)
65
+ return;
66
+
67
+ XCursesExitCursesProcess(1, "exiting from PDC_set_title");
68
+ }
69
+
70
+ /* If PDC_really_blinking is TRUE, then text with the A_BLINK */
71
+ /* attribute will actually blink. Otherwise, such text will */
72
+ /* be shown with higher color intensity (the R, G, and B values */
73
+ /* are averaged with pure white). See pdcdisp.c for details of */
74
+ /* how this is done. */
75
+ /* Unlike on other PDCurses platforms, this doesn't require */
76
+ /* decreasing the number of colors by half. Also, the choice */
77
+ /* indicated by 'blinkon' will actually be respected, so OK is */
78
+ /* always returned (most platforms don't actually support */
79
+ /* blinking). */
80
+ /* The default behavior is to not show A_BLINK text as */
81
+ /* blinking, i.e., PDC_really_blinking = FALSE. Blinking text */
82
+ /* can be pretty annoying to some people. You should probably */
83
+ /* call PDC_set_blink( TRUE) only if there is something to which */
84
+ /* the user _must_ pay attention; say, "the nuclear reactor */
85
+ /* is about to melt down". Otherwise, the bolder, brighter */
86
+ /* text should be attention-getting enough. */
87
+
88
+ int PDC_set_blink(bool blinkon)
89
+ {
90
+ if (pdc_color_started) /* We've got 256 colors in this version */
91
+ COLORS = 256;
92
+
93
+ XCursesInstruct( blinkon ? CURSES_BLINK_ON : CURSES_BLINK_OFF);
94
+ return OK;
95
+ }
@@ -0,0 +1,52 @@
1
+ /* Public Domain Curses */
2
+
3
+ #include "pdcx11.h"
4
+
5
+ #if defined(HAVE_POLL) && !defined(HAVE_USLEEP)
6
+ # include <poll.h>
7
+ #endif
8
+
9
+ void PDC_beep(void)
10
+ {
11
+ PDC_LOG(("PDC_beep() - called\n"));
12
+
13
+ XCursesInstruct(CURSES_BELL);
14
+ }
15
+
16
+ void PDC_napms(int ms)
17
+ {
18
+ PDC_LOG(("PDC_napms() - called: ms=%d\n", ms));
19
+
20
+ #if defined(HAVE_USLEEP)
21
+
22
+ usleep(1000 * ms);
23
+
24
+ #elif defined(HAVE_POLL)
25
+ {
26
+ struct pollfd fd;
27
+ fd.fd = -1;
28
+ fd.events = 0;
29
+ poll(&fd, 1, ms);
30
+ }
31
+ #endif
32
+ }
33
+
34
+ const char *PDC_sysname(void)
35
+ {
36
+ return "X11";
37
+ }
38
+
39
+ PDC_version_info PDC_version = { PDC_PORT_WINGUI,
40
+ PDC_VER_MAJOR, PDC_VER_MINOR, PDC_VER_CHANGE,
41
+ sizeof( chtype),
42
+ #ifdef PDC_WIDE
43
+ TRUE,
44
+ #else
45
+ FALSE,
46
+ #endif
47
+ #ifdef PDC_FORCE_UTF8
48
+ TRUE,
49
+ #else
50
+ FALSE,
51
+ #endif
52
+ };
@@ -0,0 +1,316 @@
1
+ /* Public Domain Curses */
2
+
3
+ #include "pdcx11.h"
4
+
5
+ #include <errno.h>
6
+ #include <stdlib.h>
7
+
8
+ /*** Functions that are called by both processes ***/
9
+
10
+ unsigned char *Xcurscr;
11
+
12
+ int XCursesProcess = 1;
13
+ int shmidSP;
14
+ int shmid_Xcurscr;
15
+ int shmkeySP;
16
+ int shmkey_Xcurscr;
17
+ int xc_otherpid;
18
+ int XCursesLINES = 24;
19
+ int XCursesCOLS = 80;
20
+ int xc_display_sock;
21
+ int xc_key_sock;
22
+ int xc_display_sockets[2];
23
+ int xc_key_sockets[2];
24
+ int xc_exit_sock;
25
+
26
+ fd_set xc_readfds;
27
+
28
+ static void _dummy_function(void)
29
+ {
30
+ PDC_napms( 1);
31
+ }
32
+
33
+ void XC_get_line_lock(int row)
34
+ {
35
+ /* loop until we can write to the line -- Patch by:
36
+ Georg Fuchs, georg.fuchs@rz.uni-regensburg.de */
37
+
38
+ while (*(Xcurscr + XCURSCR_FLAG_OFF + row))
39
+ _dummy_function();
40
+
41
+ *(Xcurscr + XCURSCR_FLAG_OFF + row) = 1;
42
+ }
43
+
44
+ void XC_release_line_lock(int row)
45
+ {
46
+ *(Xcurscr + XCURSCR_FLAG_OFF + row) = 0;
47
+ }
48
+
49
+ int XC_write_socket(int sock_num, const void *buf, int len)
50
+ {
51
+ int start = 0, rc;
52
+
53
+ PDC_LOG(("%s:XC_write_socket called: sock_num %d len %d\n",
54
+ XCLOGMSG, sock_num, len));
55
+
56
+ #ifdef MOUSE_DEBUG
57
+ if (sock_num == xc_key_sock)
58
+ printf("%s:XC_write_socket(key) len: %d\n", XCLOGMSG, len);
59
+ #endif
60
+ while (1)
61
+ {
62
+ rc = write(sock_num, (const char *)buf + start, len);
63
+
64
+ if (rc < 0 || rc == len)
65
+ return rc;
66
+
67
+ len -= rc;
68
+ start = rc;
69
+ }
70
+ }
71
+
72
+ int XC_read_socket(int sock_num, void *buf, int len)
73
+ {
74
+ int start = 0, length = len, rc;
75
+
76
+ PDC_LOG(("%s:XC_read_socket called: sock_num %d len %d\n",
77
+ XCLOGMSG, sock_num, len));
78
+
79
+ while (1)
80
+ {
81
+ rc = read(sock_num, (char *)buf + start, length);
82
+
83
+ #ifdef MOUSE_DEBUG
84
+ if (sock_num == xc_key_sock)
85
+ printf("%s:XC_read_socket(key) rc %d errno %d "
86
+ "resized: %d\n", XCLOGMSG, rc, errno, SP->resized);
87
+ #endif
88
+ if (rc < 0 && sock_num == xc_key_sock && errno == EINTR
89
+ && SP->resized != FALSE)
90
+ {
91
+ MOUSE_LOG(("%s:continuing\n", XCLOGMSG));
92
+
93
+ rc = 0;
94
+
95
+ if (SP->resized > 1)
96
+ SP->resized = TRUE;
97
+ else
98
+ SP->resized = FALSE;
99
+
100
+ memcpy(buf, &rc, sizeof(int));
101
+
102
+ return 0;
103
+ }
104
+
105
+ if (rc <= 0 || rc == length)
106
+ return rc;
107
+
108
+ length -= rc;
109
+ start = rc;
110
+ }
111
+ }
112
+
113
+ int XC_write_display_socket_int(int x)
114
+ {
115
+ return XC_write_socket(xc_display_sock, &x, sizeof(int));
116
+ }
117
+
118
+ #ifdef PDCDEBUG
119
+ void XC_say(const char *msg)
120
+ {
121
+ PDC_LOG(("%s:%s", XCLOGMSG, msg));
122
+ }
123
+ #endif
124
+
125
+ /*** Functions that are called by the "curses" process ***/
126
+
127
+ int XCursesInstruct(int flag)
128
+ {
129
+ PDC_LOG(("%s:XCursesInstruct() - called flag %d\n", XCLOGMSG, flag));
130
+
131
+ /* Send a request to X */
132
+
133
+ if (XC_write_display_socket_int(flag) < 0)
134
+ XCursesExitCursesProcess(4, "exiting from XCursesInstruct");
135
+
136
+ return OK;
137
+ }
138
+
139
+ int XCursesInstructAndWait(int flag)
140
+ {
141
+ int result;
142
+
143
+ XC_LOG(("XCursesInstructAndWait() - called\n"));
144
+
145
+ /* tell X we want to do something */
146
+
147
+ XCursesInstruct(flag);
148
+
149
+ /* wait for X to say the refresh has occurred*/
150
+
151
+ if (XC_read_socket(xc_display_sock, &result, sizeof(int)) < 0)
152
+ XCursesExitCursesProcess(5, "exiting from XCursesInstructAndWait");
153
+
154
+ if (result != CURSES_CONTINUE)
155
+ XCursesExitCursesProcess(6, "exiting from XCursesInstructAndWait"
156
+ " - synchronization error");
157
+
158
+ return OK;
159
+ }
160
+
161
+ static int _setup_curses(void)
162
+ {
163
+ int wait_value;
164
+
165
+ XC_LOG(("_setup_curses called\n"));
166
+
167
+ close(xc_display_sockets[1]);
168
+ close(xc_key_sockets[1]);
169
+
170
+ xc_display_sock = xc_display_sockets[0];
171
+ xc_key_sock = xc_key_sockets[0];
172
+
173
+ FD_ZERO(&xc_readfds);
174
+
175
+ XC_read_socket(xc_display_sock, &wait_value, sizeof(int));
176
+
177
+ if (wait_value != CURSES_CHILD)
178
+ return ERR;
179
+
180
+ /* Set LINES and COLS now so that the size of the shared memory
181
+ segment can be allocated */
182
+
183
+ if ((shmidSP = shmget(shmkeySP, sizeof(SCREEN) + XCURSESSHMMIN, 0700)) < 0)
184
+ {
185
+ perror("Cannot allocate shared memory for SCREEN");
186
+ kill(xc_otherpid, SIGKILL);
187
+ return ERR;
188
+ }
189
+
190
+ SP = (SCREEN*)shmat(shmidSP, 0, 0);
191
+
192
+ XCursesLINES = SP->lines;
193
+ LINES = XCursesLINES - SP->linesrippedoff - SP->slklines;
194
+ XCursesCOLS = COLS = SP->cols;
195
+
196
+ if ((shmid_Xcurscr = shmget(shmkey_Xcurscr,
197
+ SP->XcurscrSize + XCURSESSHMMIN, 0700)) < 0)
198
+ {
199
+ perror("Cannot allocate shared memory for curscr");
200
+ kill(xc_otherpid, SIGKILL);
201
+ return ERR;
202
+ }
203
+
204
+ PDC_LOG(("%s:shmid_Xcurscr %d shmkey_Xcurscr %d LINES %d COLS %d\n",
205
+ XCLOGMSG, shmid_Xcurscr, shmkey_Xcurscr, LINES, COLS));
206
+
207
+ Xcurscr = (unsigned char *)shmat(shmid_Xcurscr, 0, 0);
208
+ xc_atrtab = (short *)(Xcurscr + XCURSCR_ATRTAB_OFF);
209
+
210
+ XC_LOG(("cursesprocess exiting from Xinitscr\n"));
211
+
212
+ /* Always trap SIGWINCH if the C library supports SIGWINCH */
213
+
214
+ XCursesSetSignal(SIGWINCH, XCursesSigwinchHandler);
215
+
216
+ atexit(XCursesExit);
217
+
218
+ return OK;
219
+ }
220
+
221
+ int XCursesInitscr(int argc, char *argv[])
222
+ {
223
+ int pid, rc;
224
+
225
+ XC_LOG(("XCursesInitscr() - called\n"));
226
+
227
+ shmkeySP = getpid();
228
+
229
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, xc_display_sockets) < 0)
230
+ {
231
+ fprintf(stderr, "ERROR: cannot create display socketpair\n");
232
+ return ERR;
233
+ }
234
+
235
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, xc_key_sockets) < 0)
236
+ {
237
+ fprintf(stderr, "ERROR: cannot create key socketpair\n");
238
+ return ERR;
239
+ }
240
+
241
+ pid = fork();
242
+
243
+ switch(pid)
244
+ {
245
+ case -1:
246
+ fprintf(stderr, "ERROR: cannot fork()\n");
247
+ return ERR;
248
+ break;
249
+
250
+ case 0: /* child */
251
+ shmkey_Xcurscr = getpid();
252
+ #ifdef XISPARENT
253
+ XCursesProcess = 0;
254
+ rc = _setup_curses();
255
+ #else
256
+ XCursesProcess = 1;
257
+ xc_otherpid = getppid();
258
+ rc = XCursesSetupX(argc, argv);
259
+ #endif
260
+ break;
261
+
262
+ default: /* parent */
263
+ shmkey_Xcurscr = pid;
264
+ #ifdef XISPARENT
265
+ XCursesProcess = 1;
266
+ xc_otherpid = pid;
267
+ rc = XCursesSetupX(argc, argv);
268
+ #else
269
+ XCursesProcess = 0;
270
+ rc = _setup_curses();
271
+ #endif
272
+ }
273
+
274
+ return rc;
275
+ }
276
+
277
+ static void _cleanup_curses_process(int rc)
278
+ {
279
+ PDC_LOG(("%s:_cleanup_curses_process() - called: %d\n", XCLOGMSG, rc));
280
+
281
+ shutdown(xc_display_sock, 2);
282
+ close(xc_display_sock);
283
+
284
+ shutdown(xc_key_sock, 2);
285
+ close(xc_key_sock);
286
+
287
+ shmdt((char *)SP);
288
+ shmdt((char *)Xcurscr);
289
+
290
+ if (rc)
291
+ _exit(rc);
292
+ }
293
+
294
+ void XCursesExitCursesProcess(int rc, char *msg)
295
+ {
296
+ PDC_LOG(("%s:XCursesExitCursesProcess() - called: %d %s\n",
297
+ XCLOGMSG, rc, msg));
298
+
299
+ endwin();
300
+ _cleanup_curses_process(rc);
301
+ }
302
+
303
+ void XCursesExit(void)
304
+ {
305
+ static bool called = FALSE;
306
+
307
+ XC_LOG(("XCursesExit() - called\n"));
308
+
309
+ if (FALSE == called)
310
+ {
311
+ XCursesInstruct(CURSES_EXIT);
312
+ _cleanup_curses_process(0);
313
+
314
+ called = TRUE;
315
+ }
316
+ }
@@ -0,0 +1,191 @@
1
+ /* Public Domain Curses */
2
+
3
+ #ifdef HAVE_CONFIG_H
4
+ # include "config.h"
5
+ #endif
6
+
7
+ #include <curspriv.h>
8
+
9
+ #ifdef HAVE_UNISTD_H
10
+ # include <unistd.h>
11
+ #endif
12
+
13
+ #include <signal.h>
14
+ #include <ctype.h>
15
+ #include <pwd.h>
16
+
17
+ #include <sys/types.h>
18
+ #include <sys/socket.h>
19
+ #ifdef HAVE_FCNTL_H
20
+ # include <fcntl.h>
21
+ #endif
22
+ #ifdef HAVE_SYS_SELECT_H
23
+ # include <sys/select.h> /* AIX needs this for FD_ZERO etc macros */
24
+ #endif
25
+ #include <sys/ipc.h>
26
+ #include <sys/shm.h>
27
+
28
+ #ifdef TIME_WITH_SYS_TIME
29
+ # include <sys/time.h>
30
+ # include <time.h>
31
+ #else
32
+ # ifdef HAVE_SYS_TIME_H
33
+ # include <sys/time.h>
34
+ # else
35
+ # include <time.h>
36
+ # endif
37
+ #endif
38
+
39
+ #include <Intrinsic.h>
40
+ #include <StringDefs.h>
41
+ #include <Shell.h>
42
+
43
+ #ifdef USE_XAW3D
44
+ # include <Xaw3d/Box.h>
45
+ # include <Xaw3d/Scrollbar.h>
46
+ #elif defined(USE_NEXTAW)
47
+ # include <neXtaw/Box.h>
48
+ # include <neXtaw/Scrollbar.h>
49
+ #else
50
+ # include <Xaw/Box.h>
51
+ # include <Xaw/Scrollbar.h>
52
+ #endif
53
+ #include "x11/ScrollBox.h"
54
+
55
+ #include "Xmu/StdSel.h"
56
+ #include "Xmu/Atoms.h"
57
+
58
+ #include <keysym.h>
59
+ #include <Xatom.h>
60
+
61
+ #define XCURSCR_Y_SIZE (XCursesLINES * XCursesCOLS * sizeof(chtype))
62
+ #define XCURSCR_FLAG_SIZE (XCursesLINES * sizeof(int))
63
+ #define XCURSCR_START_SIZE (XCursesLINES * sizeof(int))
64
+ #define XCURSCR_LENGTH_SIZE (XCursesLINES * sizeof(int))
65
+ #define XCURSCR_ATRTAB_SIZE (PDC_COLOR_PAIRS * 2 * sizeof(short))
66
+ #define XCURSCR_SIZE (XCURSCR_FLAG_SIZE + XCURSCR_START_SIZE + \
67
+ XCURSCR_LENGTH_SIZE + XCURSCR_Y_SIZE + XCURSCR_ATRTAB_SIZE + \
68
+ sizeof(XColor))
69
+
70
+ #define XCURSCR_Y_OFF(y) ((y) * XCursesCOLS * sizeof(chtype))
71
+ #define XCURSCR_FLAG_OFF (XCURSCR_Y_OFF(0) + XCURSCR_Y_SIZE)
72
+ #define XCURSCR_START_OFF (XCURSCR_FLAG_OFF + XCURSCR_FLAG_SIZE)
73
+ #define XCURSCR_LENGTH_OFF (XCURSCR_START_OFF + XCURSCR_START_SIZE)
74
+ #define XCURSCR_ATRTAB_OFF (XCURSCR_LENGTH_OFF + XCURSCR_LENGTH_SIZE)
75
+ #define XCURSCR_XCOLOR_OFF (XCURSCR_ATRTAB_OFF + XCURSCR_ATRTAB_SIZE)
76
+
77
+ typedef struct
78
+ {
79
+ int lines;
80
+ int cols;
81
+ Pixel cursorColor;
82
+ Pixel colorBlack;
83
+ Pixel colorRed;
84
+ Pixel colorGreen;
85
+ Pixel colorYellow;
86
+ Pixel colorBlue;
87
+ Pixel colorMagenta;
88
+ Pixel colorCyan;
89
+ Pixel colorWhite;
90
+ Pixel colorBoldBlack;
91
+ Pixel colorBoldRed;
92
+ Pixel colorBoldGreen;
93
+ Pixel colorBoldYellow;
94
+ Pixel colorBoldBlue;
95
+ Pixel colorBoldMagenta;
96
+ Pixel colorBoldCyan;
97
+ Pixel colorBoldWhite;
98
+ Pixel pointerForeColor;
99
+ Pixel pointerBackColor;
100
+ XFontStruct *normalFont;
101
+ XFontStruct *italicFont;
102
+ XFontStruct *boldFont;
103
+ char *bitmap;
104
+ #ifdef HAVE_XPM_H
105
+ char *pixmap;
106
+ #endif
107
+ char *composeKey;
108
+ Cursor pointer;
109
+ int shmmin;
110
+ int borderWidth;
111
+ int borderColor;
112
+ int clickPeriod;
113
+ int doubleClickPeriod;
114
+ int scrollbarWidth;
115
+ int cursorBlinkRate;
116
+ char *textCursor;
117
+ } XCursesAppData;
118
+
119
+ extern XCursesAppData xc_app_data;
120
+
121
+ #define XCURSESSHMMIN xc_app_data.shmmin
122
+
123
+ #define XCLOGMSG (XCursesProcess ? " X" : "CURSES")
124
+
125
+ void XC_get_line_lock(int);
126
+ void XC_release_line_lock(int);
127
+
128
+ int PDC_display_cursor(int, int, int, int, int);
129
+
130
+ void XCursesExitCursesProcess(int, char *);
131
+ int XCursesInstruct(int);
132
+ int XCursesInstructAndWait(int);
133
+ int XCursesInitscr(int, char **);
134
+
135
+ int XC_write_socket(int, const void *, int);
136
+ int XC_read_socket(int, void *, int);
137
+ int XC_write_display_socket_int(int);
138
+
139
+ int XCursesSetupX(int argc, char *argv[]);
140
+ RETSIGTYPE XCursesSigwinchHandler(int signo);
141
+
142
+ #ifdef _HPUX_SOURCE
143
+ # define FD_SET_CAST int *
144
+ #else
145
+ # define FD_SET_CAST fd_set *
146
+ #endif
147
+
148
+ extern fd_set xc_readfds;
149
+
150
+ extern unsigned char *Xcurscr;
151
+ extern int XCursesProcess;
152
+ extern int shmidSP;
153
+ extern int shmid_Xcurscr;
154
+ extern int shmkeySP;
155
+ extern int shmkey_Xcurscr;
156
+ extern int xc_otherpid;
157
+ extern int XCursesLINES;
158
+ extern int XCursesCOLS;
159
+ extern int xc_display_sock;
160
+ extern int xc_key_sock;
161
+ extern int xc_display_sockets[2];
162
+ extern int xc_key_sockets[2];
163
+ extern int xc_exit_sock;
164
+
165
+ typedef RETSIGTYPE (*signal_handler)();
166
+
167
+ signal_handler XCursesSetSignal(int, signal_handler);
168
+
169
+ #ifdef PDCDEBUG
170
+ void XC_say(const char *msg);
171
+ # define XC_LOG(x) XC_say x
172
+ #else
173
+ # define XC_LOG(x)
174
+ #endif
175
+
176
+ #ifdef MOUSE_DEBUG
177
+ # define MOUSE_LOG(x) printf x
178
+ #else
179
+ # define MOUSE_LOG(x)
180
+ #endif
181
+
182
+ enum
183
+ {
184
+ CURSES_CLEAR_SELECTION, CURSES_DISPLAY_CURSOR, CURSES_SET_SELECTION,
185
+ CURSES_GET_SELECTION, CURSES_TITLE, CURSES_REFRESH_SCROLLBAR,
186
+ CURSES_RESIZE, CURSES_BELL, CURSES_CONTINUE, CURSES_CURSOR,
187
+ CURSES_CHILD, CURSES_REFRESH, CURSES_GET_COLOR, CURSES_SET_COLOR,
188
+ CURSES_BLINK_ON, CURSES_BLINK_OFF, CURSES_EXIT
189
+ };
190
+
191
+ extern short *xc_atrtab;