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
@@ -0,0 +1,101 @@
1
+ /* Public Domain Curses */
2
+
3
+ #include "pdcdos.h"
4
+
5
+ /*man-start**************************************************************
6
+
7
+ pdcsetsc
8
+ --------
9
+
10
+ ### Synopsis
11
+
12
+ int PDC_set_blink(bool blinkon);
13
+ void PDC_set_title(const char *title);
14
+
15
+ ### Description
16
+
17
+ PDC_set_blink() toggles whether the A_BLINK attribute sets an
18
+ actual blink mode (TRUE), or sets the background color to high
19
+ intensity (FALSE). The default is platform-dependent (FALSE in
20
+ most cases). It returns OK if it could set the state to match
21
+ the given parameter, ERR otherwise. Current platforms also
22
+ adjust the value of COLORS according to this function -- 16 for
23
+ FALSE, and 8 for TRUE.
24
+
25
+ PDC_set_title() sets the title of the window in which the curses
26
+ program is running. This function may not do anything on some
27
+ platforms. (Currently it only works in Win32 and X11.)
28
+
29
+ ### Portability
30
+ X/Open BSD SYS V
31
+ PDC_set_blink - - -
32
+ PDC_set_title - - -
33
+
34
+ **man-end****************************************************************/
35
+
36
+ int PDC_curs_set(int visibility)
37
+ {
38
+ PDCREGS regs;
39
+ int ret_vis, start, end;
40
+
41
+ PDC_LOG(("PDC_curs_set() - called: visibility=%d\n", visibility));
42
+
43
+ ret_vis = SP->visibility;
44
+ SP->visibility = visibility;
45
+
46
+ switch (visibility)
47
+ {
48
+ case 0: /* invisible */
49
+ start = 32;
50
+ end = 0; /* was 32 */
51
+ break;
52
+ case 2: /* highly visible */
53
+ start = 0; /* full-height block */
54
+ end = 7;
55
+ break;
56
+ default: /* normal visibility */
57
+ start = (SP->orig_cursor >> 8) & 0xff;
58
+ end = SP->orig_cursor & 0xff;
59
+ }
60
+
61
+ /* if scrnmode is not set, some BIOSes hang */
62
+
63
+ regs.h.ah = 0x01;
64
+ regs.h.al = (unsigned char)pdc_scrnmode;
65
+ regs.h.ch = (unsigned char)start;
66
+ regs.h.cl = (unsigned char)end;
67
+ PDCINT(0x10, regs);
68
+
69
+ return ret_vis;
70
+ }
71
+
72
+ void PDC_set_title(const char *title)
73
+ {
74
+ PDC_LOG(("PDC_set_title() - called: <%s>\n", title));
75
+ }
76
+
77
+ int PDC_set_blink(bool blinkon)
78
+ {
79
+ PDCREGS regs;
80
+
81
+ switch (pdc_adapter)
82
+ {
83
+ case _EGACOLOR:
84
+ case _EGAMONO:
85
+ case _VGACOLOR:
86
+ case _VGAMONO:
87
+ regs.W.ax = 0x1003;
88
+ regs.W.bx = blinkon;
89
+
90
+ PDCINT(0x10, regs);
91
+
92
+ if (pdc_color_started)
93
+ COLORS = blinkon ? 8 : 16;
94
+
95
+ break;
96
+ default:
97
+ COLORS = 8;
98
+ }
99
+
100
+ return (COLORS - (blinkon * 8) != 8) ? OK : ERR;
101
+ }
@@ -0,0 +1,212 @@
1
+ /* Public Domain Curses */
2
+
3
+ #include <limits.h>
4
+ #include "pdcdos.h"
5
+
6
+ void PDC_beep(void)
7
+ {
8
+ PDCREGS regs;
9
+
10
+ PDC_LOG(("PDC_beep() - called\n"));
11
+
12
+ regs.W.ax = 0x0e07; /* Write ^G in TTY fashion */
13
+ regs.W.bx = 0;
14
+ PDCINT(0x10, regs);
15
+ }
16
+
17
+ #if UINT_MAX >= 0xfffffffful
18
+ # define irq0_ticks() (getdosmemdword(0x46c))
19
+ /* For 16-bit platforms, we expect that the program will need _two_ memory
20
+ read instructions to read the tick count. Between the two instructions,
21
+ if we do not turn off interrupts, an IRQ 0 might intervene and update the
22
+ tick count with a carry over from the lower half to the upper half ---
23
+ and our read count will be bogus. */
24
+ #elif defined __TURBOC__
25
+ static unsigned long irq0_ticks(void)
26
+ {
27
+ unsigned long t;
28
+ disable();
29
+ t = getdosmemdword(0x46c);
30
+ enable();
31
+ return t;
32
+ }
33
+ #elif defined __WATCOMC__
34
+ static unsigned long irq0_ticks(void)
35
+ {
36
+ unsigned long t;
37
+ _disable();
38
+ t = getdosmemdword(0x46c);
39
+ _enable();
40
+ return t;
41
+ }
42
+ #else
43
+ # define irq0_ticks() (getdosmemdword(0x46c)) /* FIXME */
44
+ #endif
45
+
46
+ static void do_idle(void)
47
+ {
48
+ PDCREGS regs;
49
+
50
+ regs.W.ax = 0x1680;
51
+ PDCINT(0x2f, regs);
52
+ PDCINT(0x28, regs);
53
+ }
54
+
55
+ #define MAX_TICK 0x1800b0ul /* no. of IRQ 0 clock ticks per day;
56
+ BIOS counter (0:0x46c) will go up
57
+ to MAX_TICK - 1 before wrapping to
58
+ 0 at midnight */
59
+ #define MS_PER_DAY 86400000ul /* no. of milliseconds in a day */
60
+
61
+ void PDC_napms(int ms)
62
+ {
63
+ unsigned long goal, start, current;
64
+
65
+ PDC_LOG(("PDC_napms() - called: ms=%d\n", ms));
66
+
67
+ #if INT_MAX > MS_PER_DAY / 2
68
+ /* If `int' is 32-bit, we might be asked to "nap" for more than one day,
69
+ in which case the system timer might wrap around at least twice, and
70
+ that will be tricky to handle as is. Slice the "nap" into half-day
71
+ portions. */
72
+ while (ms > MS_PER_DAY / 2)
73
+ {
74
+ PDC_napms (MS_PER_DAY / 2);
75
+ ms -= MS_PER_DAY / 2;
76
+ }
77
+ #endif
78
+
79
+ if (ms < 0)
80
+ return;
81
+
82
+ /* Scale the millisecond count by MAX_TICK / MS_PER_DAY. The scaling
83
+ done here is not very precise, but what is more important is
84
+ preventing integer overflow.
85
+
86
+ The approximation 67 / 3680 can be obtained by considering the
87
+ convergents (mathworld.wolfram.com/Convergent.html) of MAX_TICK /
88
+ MS_PER_DAY 's continued fraction representation. */
89
+ #if MS_PER_DAY / 2 <= ULONG_MAX / 67ul
90
+ # define MS_TO_TICKS(x) ((x) * 67ul / 3680ul)
91
+ #else
92
+ # error "unpossible!"
93
+ #endif
94
+ goal = MS_TO_TICKS(ms);
95
+
96
+ if (!goal)
97
+ goal++;
98
+
99
+ start = irq0_ticks();
100
+ goal += start;
101
+
102
+ if (goal >= MAX_TICK)
103
+ {
104
+ /* We expect to cross over midnight! Wait for the clock tick count
105
+ to wrap around, then wait out the remaining ticks. */
106
+ goal -= MAX_TICK;
107
+
108
+ while (irq0_ticks() == start)
109
+ do_idle();
110
+
111
+ while (irq0_ticks() > start)
112
+ do_idle();
113
+
114
+ start = 0;
115
+ }
116
+
117
+ while (goal > (current = irq0_ticks()))
118
+ {
119
+ if (current < start)
120
+ {
121
+ /* If the BIOS time somehow gets reset under us (ugh!), then
122
+ restart (what is left of) the nap with `current' as the new
123
+ starting time. Remember to adjust the goal time
124
+ accordingly! */
125
+ goal -= start - current;
126
+ start = current;
127
+ }
128
+
129
+ do_idle();
130
+ }
131
+ }
132
+
133
+ const char *PDC_sysname(void)
134
+ {
135
+ return "DOS";
136
+ }
137
+
138
+ PDC_version_info PDC_version = { PDC_PORT_DOS,
139
+ PDC_VER_MAJOR, PDC_VER_MINOR, PDC_VER_CHANGE,
140
+ sizeof( chtype),
141
+ /* note that thus far, 'wide' and 'UTF8' versions exist */
142
+ /* only for SDL2, X11, Win32, and Win32a; elsewhere, */
143
+ /* these will be FALSE */
144
+ #ifdef PDC_WIDE
145
+ TRUE,
146
+ #else
147
+ FALSE,
148
+ #endif
149
+ #ifdef PDC_FORCE_UTF8
150
+ TRUE,
151
+ #else
152
+ FALSE,
153
+ #endif
154
+ };
155
+
156
+ #ifdef __DJGPP__
157
+
158
+ unsigned char getdosmembyte(int offset)
159
+ {
160
+ unsigned char b;
161
+
162
+ dosmemget(offset, sizeof(unsigned char), &b);
163
+ return b;
164
+ }
165
+
166
+ unsigned short getdosmemword(int offset)
167
+ {
168
+ unsigned short w;
169
+
170
+ dosmemget(offset, sizeof(unsigned short), &w);
171
+ return w;
172
+ }
173
+
174
+ unsigned long getdosmemdword(int offset)
175
+ {
176
+ unsigned long dw;
177
+
178
+ dosmemget(offset, sizeof(unsigned long), &dw);
179
+ return dw;
180
+ }
181
+
182
+ void setdosmembyte(int offset, unsigned char b)
183
+ {
184
+ dosmemput(&b, sizeof(unsigned char), offset);
185
+ }
186
+
187
+ void setdosmemword(int offset, unsigned short w)
188
+ {
189
+ dosmemput(&w, sizeof(unsigned short), offset);
190
+ }
191
+
192
+ #endif
193
+
194
+ #if defined(__WATCOMC__) && defined(__386__)
195
+
196
+ void PDC_dpmi_int(int vector, pdc_dpmi_regs *rmregs)
197
+ {
198
+ union REGPACK regs = {0};
199
+
200
+ rmregs->w.ss = 0;
201
+ rmregs->w.sp = 0;
202
+ rmregs->w.flags = 0;
203
+
204
+ regs.w.ax = 0x300;
205
+ regs.h.bl = vector;
206
+ regs.x.edi = FP_OFF(rmregs);
207
+ regs.x.es = FP_SEG(rmregs);
208
+
209
+ intr(0x31, &regs);
210
+ }
211
+
212
+ #endif
@@ -0,0 +1,26 @@
1
+ # Common elements for most of the DOS, OS/2 and Win32
2
+ # makefiles (not Watcom or LCC)
3
+
4
+ PDCURSES_CURSES_H = $(PDCURSES_SRCDIR)/curses.h
5
+ PDCURSES_CURSPRIV_H = $(PDCURSES_SRCDIR)/curspriv.h
6
+ PDCURSES_HEADERS = $(PDCURSES_CURSES_H) $(PDCURSES_CURSPRIV_H)
7
+ PANEL_HEADER = $(PDCURSES_SRCDIR)/panel.h
8
+ TERM_HEADER = $(PDCURSES_SRCDIR)/term.h
9
+
10
+ srcdir = $(PDCURSES_SRCDIR)/pdcurses
11
+ demodir = $(PDCURSES_SRCDIR)/demos
12
+
13
+ LIBOBJS = addch.$(O) addchstr.$(O) addstr.$(O) attr.$(O) beep.$(O) \
14
+ bkgd.$(O) border.$(O) clear.$(O) color.$(O) delch.$(O) deleteln.$(O) \
15
+ deprec.$(O) getch.$(O) getstr.$(O) getyx.$(O) inch.$(O) inchstr.$(O) \
16
+ initscr.$(O) inopts.$(O) insch.$(O) insstr.$(O) instr.$(O) kernel.$(O) \
17
+ keyname.$(O) mouse.$(O) move.$(O) outopts.$(O) overlay.$(O) pad.$(O) \
18
+ panel.$(O) printw.$(O) refresh.$(O) scanw.$(O) scr_dump.$(O) scroll.$(O) \
19
+ slk.$(O) termattr.$(O) terminfo.$(O) touch.$(O) util.$(O) window.$(O) \
20
+ debug.$(O)
21
+
22
+ PDCOBJS = pdcclip.$(O) pdcdisp.$(O) pdcgetsc.$(O) pdckbd.$(O) pdcscrn.$(O) \
23
+ pdcsetsc.$(O) pdcutil.$(O)
24
+
25
+ DEMOS = testcurs.exe ozdemo.exe xmas.exe tuidemo.exe firework.exe \
26
+ newtest.exe ptest.exe rain.exe worm.exe
@@ -0,0 +1,20 @@
1
+ # Makefile include: build a binary archive with Info-ZIP
2
+ # under DOS, OS/2 or Win32
3
+
4
+ dist: $(PDCLIBS)
5
+ echo PDCurses $(VERDOT) for $(PLATFORM1) > file_id.diz
6
+ echo ------------------------------------------ >> file_id.diz
7
+ echo Public Domain Curses library for >> file_id.diz
8
+ echo $(PLATFORM2). >> file_id.diz
9
+ echo Source available in PDCURS$(VER).ZIP >> file_id.diz
10
+ echo Public Domain. >> file_id.diz
11
+ echo $(PDCURSES_SRCDIR)\README.md > flist
12
+ echo $(PDCURSES_SRCDIR)\HISTORY.md >> flist
13
+ echo $(PDCURSES_SRCDIR)\curses.h >> flist
14
+ echo $(PDCURSES_SRCDIR)\panel.h >> flist
15
+ echo $(PDCURSES_SRCDIR)\term.h >> flist
16
+ echo $(LIBCURSES) >> flist
17
+ echo file_id.diz >> flist
18
+ zip -9jX $(ARCNAME) -@ <flist
19
+ del flist
20
+ del file_id.diz
@@ -0,0 +1,21 @@
1
+ PDCurses Documentation
2
+ ======================
3
+
4
+ Some plain text documents to provide a basic overview of PDCurses and
5
+ details for specific platforms, along with a program to combine them
6
+ with the "man page" sections from the source code files, into
7
+ "PDCurses.md".
8
+
9
+
10
+ Building
11
+ --------
12
+
13
+ - Type "make". ("make clean" to remove the built files.) A Unix-like
14
+ environment is required for the Makefile. This is called automatically
15
+ when doing a top-level make of the X11 port.
16
+
17
+
18
+ Distribution Status
19
+ -------------------
20
+
21
+ Public Domain, except for manext.c, which is GPL 2+.
@@ -0,0 +1,361 @@
1
+ PDCurses User's Guide
2
+ =====================
3
+
4
+ Curses Overview
5
+ ---------------
6
+
7
+ The X/Open Curses Interface Definition describes a set of C-Language
8
+ functions that provide screen-handling and updating, which are
9
+ collectively known as the curses library.
10
+
11
+ The curses library permits manipulation of data structures called
12
+ windows which may be thought of as two-dimensional arrays of
13
+ characters representing all or part of a terminal's screen. The
14
+ windows are manipulated using a procedural interface described
15
+ elsewhere. The curses package maintains a record of what characters
16
+ are on the screen. At the most basic level, manipulation is done with
17
+ the routines move() and addch() which are used to "move" the curses
18
+ around and add characters to the default window, stdscr, which
19
+ represents the whole screen.
20
+
21
+ An application may use these routines to add data to the window in any
22
+ convenient order. Once all data have been added, the routine
23
+ refresh() is called. The package then determines what changes have
24
+ been made which affect the screen. The screen contents are then
25
+ changed to reflect those characters now in the window, using a
26
+ sequence of operations optimized for the type of terminal in use.
27
+
28
+ At a higher level routines combining the actions of move() and addch()
29
+ are defined, as are routines to add whole strings and to perform
30
+ format conversions in the manner of printf().
31
+
32
+ Interfaces are also defined to erase the entire window and to specify
33
+ the attributes of individual characters in the window. Attributes
34
+ such as inverse video, underline and blink can be used on a
35
+ per-character basis.
36
+
37
+ New windows can be created by allowing the application to build
38
+ several images of the screen and display the appropriate one very
39
+ quickly. New windows are created using the routine newwin(). For
40
+ each routine that manipulates the default window, stdscr, there is a
41
+ corresponding routine prefixed with w to manipulate the contents of a
42
+ specified window; for example, move() and wmove(). In fact, move(...)
43
+ is functionally equivalent to wmove( stdscr, ...). This is similar to
44
+ the interface offered by printf(...) and fprintf(stdout, ...).
45
+
46
+ Windows do not have to correspond to the entire screen. It is
47
+ possible to create smaller windows, and also to indicate that the
48
+ window is only partially visible on the screen. Furthermore, large
49
+ windows or pads, which are bigger than the actual screen size, may be
50
+ created.
51
+
52
+ Interfaces are also defined to allow input character manipulation and
53
+ to disable and enable many input attributes: character echo, single
54
+ character input with or without signal processing (cbreak or raw
55
+ modes), carriage returns mapping to newlines, screen scrolling, etc.
56
+
57
+
58
+ Data Types and the \<curses.h\> Header
59
+ --------------------------------------
60
+
61
+ The data types supported by curses are described in this section.
62
+
63
+ As the library supports a procedural interface to the data types, actual
64
+ structure contents are not described. All curses data are manipulated
65
+ using the routines provided.
66
+
67
+
68
+ ### The \<curses.h\> Header
69
+
70
+ The \<curses.h\> header defines various constants and declares the data
71
+ types that are available to the application.
72
+
73
+
74
+ ### Data Types
75
+
76
+ The following data types are declared:
77
+
78
+ WINDOW * pointer to screen representation
79
+ SCREEN * pointer to terminal descriptor
80
+ bool boolean data type
81
+ chtype representation of a character in a window
82
+ cchar_t the wide-character equivalent of chtype
83
+ attr_t for WA_-style attributes
84
+
85
+ The actual WINDOW and SCREEN objects used to store information are
86
+ created by the corresponding routines and a pointer to them is provided.
87
+ All manipulation is through that pointer.
88
+
89
+
90
+ ### Variables
91
+
92
+ The following variables are defined:
93
+
94
+ LINES number of lines on terminal screen
95
+ COLS number of columns on terminal screen
96
+ stdscr pointer to the default screen window
97
+ curscr pointer to the current screen image
98
+ SP pointer to the current SCREEN struct
99
+ Mouse_status status of the mouse
100
+ COLORS number of colors available
101
+ COLOR_PAIRS number of color pairs available
102
+ TABSIZE size of one TAB block
103
+ acs_map[] alternate character set map
104
+ ttytype[] terminal name/description
105
+
106
+
107
+ ### Constants
108
+
109
+ The following constants are defined:
110
+
111
+ #### General
112
+
113
+ FALSE boolean false value
114
+ TRUE boolean true value
115
+ NULL zero pointer value
116
+ ERR value returned on error condition
117
+ OK value returned on successful completion
118
+
119
+ #### Video Attributes
120
+
121
+ Normally, attributes are a property of the character.
122
+
123
+ For chtype:
124
+
125
+ A_ALTCHARSET use the alternate character set
126
+ A_BLINK bright background or blinking
127
+ A_BOLD bright foreground or bold
128
+ A_DIM half bright -- no effect in PDCurses
129
+ A_INVIS invisible
130
+ A_ITALIC italic
131
+ A_LEFTLINE line along the left edge
132
+ A_PROTECT protected (?) -- PDCurses renders this as a
133
+ combination of the *LINE attributes
134
+ A_REVERSE reverse video
135
+ A_RIGHTLINE line along the right edge
136
+ A_STANDOUT terminal's best highlighting mode
137
+ A_UNDERLINE underline
138
+
139
+ A_ATTRIBUTES bit-mask to extract attributes
140
+ A_CHARTEXT bit-mask to extract a character
141
+ A_COLOR bit-mask to extract a color-pair
142
+
143
+ Not all attributes will work on all terminals. A_RIGHTLINE, A_LEFTLINE
144
+ and A_ITALIC are specific to PDCurses. A_INVIS and A_ITALIC are given
145
+ the same value in PDCurses.
146
+
147
+ For attr_t:
148
+
149
+ WA_ALTCHARSET same as A_ALTCHARSET
150
+ WA_BLINK same as A_BLINK
151
+ WA_BOLD same as A_BOLD
152
+ WA_DIM same as A_DIM
153
+ WA_INVIS same as A_INVIS
154
+ WA_LEFT same as A_LEFTLINE
155
+ WA_PROTECT same as A_PROTECT
156
+ WA_REVERSE same as A_REVERSE
157
+ WA_RIGHT same as A_RIGHTLINE
158
+ WA_STANDOUT same as A_STANDOUT
159
+ WA_UNDERLINE same as A_UNDERLINE
160
+
161
+ Note that while A_LEFTLINE and A_RIGHTLINE are PDCurses-specific,
162
+ WA_LEFT and WA_RIGHT are standard. The following are also defined, for
163
+ compatibility, but currently have no effect in PDCurses: WA_HORIZONTAL,
164
+ WA_LOW, WA_TOP, WA_VERTICAL.
165
+
166
+ ### The Alternate Character Set
167
+
168
+ For use in chtypes and with related functions. These are a portable way
169
+ to represent graphics characters on different terminals.
170
+
171
+ VT100-compatible symbols -- box characters:
172
+
173
+ ACS_ULCORNER upper left box corner
174
+ ACS_LLCORNER lower left box corner
175
+ ACS_URCORNER upper right box corner
176
+ ACS_LRCORNER lower right box corner
177
+ ACS_RTEE right "T"
178
+ ACS_LTEE left "T"
179
+ ACS_BTEE bottom "T"
180
+ ACS_TTEE top "T"
181
+ ACS_HLINE horizontal line
182
+ ACS_VLINE vertical line
183
+ ACS_PLUS plus sign, cross, or four-corner piece
184
+
185
+ VT100-compatible symbols -- other:
186
+
187
+ ACS_S1 scan line 1
188
+ ACS_S9 scan line 9
189
+ ACS_DIAMOND diamond
190
+ ACS_CKBOARD checkerboard -- 50% grey
191
+ ACS_DEGREE degree symbol
192
+ ACS_PLMINUS plus/minus sign
193
+ ACS_BULLET bullet
194
+
195
+ Teletype 5410v1 symbols -- these are defined in SysV curses, but are not
196
+ well-supported by most terminals. Stick to VT100 characters for optimum
197
+ portability:
198
+
199
+ ACS_LARROW left arrow
200
+ ACS_RARROW right arrow
201
+ ACS_DARROW down arrow
202
+ ACS_UARROW up arrow
203
+ ACS_BOARD checkerboard -- lighter (less dense) than
204
+ ACS_CKBOARD
205
+ ACS_LANTERN lantern symbol
206
+ ACS_BLOCK solid block
207
+
208
+ That goes double for these -- undocumented SysV symbols. Don't use them:
209
+
210
+ ACS_S3 scan line 3
211
+ ACS_S7 scan line 7
212
+ ACS_LEQUAL less than or equal
213
+ ACS_GEQUAL greater than or equal
214
+ ACS_PI pi
215
+ ACS_NEQUAL not equal
216
+ ACS_STERLING pounds sterling symbol
217
+
218
+ Box character aliases:
219
+
220
+ ACS_BSSB same as ACS_ULCORNER
221
+ ACS_SSBB same as ACS_LLCORNER
222
+ ACS_BBSS same as ACS_URCORNER
223
+ ACS_SBBS same as ACS_LRCORNER
224
+ ACS_SBSS same as ACS_RTEE
225
+ ACS_SSSB same as ACS_LTEE
226
+ ACS_SSBS same as ACS_BTEE
227
+ ACS_BSSS same as ACS_TTEE
228
+ ACS_BSBS same as ACS_HLINE
229
+ ACS_SBSB same as ACS_VLINE
230
+ ACS_SSSS same as ACS_PLUS
231
+
232
+ For cchar_t and wide-character functions, WACS_ equivalents are also
233
+ defined.
234
+
235
+ ### Colors
236
+
237
+ For use with init_pair(), color_set(), etc.:
238
+
239
+ COLOR_BLACK
240
+ COLOR_BLUE
241
+ COLOR_GREEN
242
+ COLOR_CYAN
243
+ COLOR_RED
244
+ COLOR_MAGENTA
245
+ COLOR_YELLOW
246
+ COLOR_WHITE
247
+
248
+ Use these instead of numeric values. The definition of the colors
249
+ depends on the implementation of curses.
250
+
251
+
252
+ ### Input Values
253
+
254
+ The following constants might be returned by getch() if keypad() has
255
+ been enabled. Note that not all of these may be supported on a
256
+ particular terminal:
257
+
258
+ KEY_BREAK break key
259
+ KEY_DOWN the four arrow keys
260
+ KEY_UP
261
+ KEY_LEFT
262
+ KEY_RIGHT
263
+ KEY_HOME home key (upward+left arrow)
264
+ KEY_BACKSPACE backspace
265
+ KEY_F0 function keys; space for 64 keys is reserved
266
+ KEY_F(n) (KEY_F0+(n))
267
+ KEY_DL delete line
268
+ KEY_IL insert line
269
+ KEY_DC delete character
270
+ KEY_IC insert character
271
+ KEY_EIC exit insert character mode
272
+ KEY_CLEAR clear screen
273
+ KEY_EOS clear to end of screen
274
+ KEY_EOL clear to end of line
275
+ KEY_SF scroll 1 line forwards
276
+ KEY_SR scroll 1 line backwards (reverse)
277
+ KEY_NPAGE next page
278
+ KEY_PPAGE previous page
279
+ KEY_STAB set tab
280
+ KEY_CTAB clear tab
281
+ KEY_CATAB clear all tabs
282
+ KEY_ENTER enter or send
283
+ KEY_SRESET soft (partial) reset
284
+ KEY_RESET reset or hard reset
285
+ KEY_PRINT print or copy
286
+ KEY_LL home down or bottom (lower left)
287
+ KEY_A1 upper left of virtual keypad
288
+ KEY_A3 upper right of virtual keypad
289
+ KEY_B2 center of virtual keypad
290
+ KEY_C1 lower left of virtual keypad
291
+ KEY_C3 lower right of virtual keypad
292
+
293
+ KEY_BTAB Back tab key
294
+ KEY_BEG Beginning key
295
+ KEY_CANCEL Cancel key
296
+ KEY_CLOSE Close key
297
+ KEY_COMMAND Cmd (command) key
298
+ KEY_COPY Copy key
299
+ KEY_CREATE Create key
300
+ KEY_END End key
301
+ KEY_EXIT Exit key
302
+ KEY_FIND Find key
303
+ KEY_HELP Help key
304
+ KEY_MARK Mark key
305
+ KEY_MESSAGE Message key
306
+ KEY_MOVE Move key
307
+ KEY_NEXT Next object key
308
+ KEY_OPEN Open key
309
+ KEY_OPTIONS Options key
310
+ KEY_PREVIOUS Previous object key
311
+ KEY_REDO Redo key
312
+ KEY_REFERENCE Reference key
313
+ KEY_REFRESH Refresh key
314
+ KEY_REPLACE Replace key
315
+ KEY_RESTART Restart key
316
+ KEY_RESUME Resume key
317
+ KEY_SAVE Save key
318
+ KEY_SBEG Shifted beginning key
319
+ KEY_SCANCEL Shifted cancel key
320
+ KEY_SCOMMAND Shifted command key
321
+ KEY_SCOPY Shifted copy key
322
+ KEY_SCREATE Shifted create key
323
+ KEY_SDC Shifted delete char key
324
+ KEY_SDL Shifted delete line key
325
+ KEY_SELECT Select key
326
+ KEY_SEND Shifted end key
327
+ KEY_SEOL Shifted clear line key
328
+ KEY_SEXIT Shifted exit key
329
+ KEY_SFIND Shifted find key
330
+ KEY_SHELP Shifted help key
331
+ KEY_SHOME Shifted home key
332
+ KEY_SIC Shifted input key
333
+ KEY_SLEFT Shifted left arrow key
334
+ KEY_SMESSAGE Shifted message key
335
+ KEY_SMOVE Shifted move key
336
+ KEY_SNEXT Shifted next key
337
+ KEY_SOPTIONS Shifted options key
338
+ KEY_SPREVIOUS Shifted prev key
339
+ KEY_SPRINT Shifted print key
340
+ KEY_SREDO Shifted redo key
341
+ KEY_SREPLACE Shifted replace key
342
+ KEY_SRIGHT Shifted right arrow
343
+ KEY_SRSUME Shifted resume key
344
+ KEY_SSAVE Shifted save key
345
+ KEY_SSUSPEND Shifted suspend key
346
+ KEY_SUNDO Shifted undo key
347
+ KEY_SUSPEND Suspend key
348
+ KEY_UNDO Undo key
349
+
350
+ The virtual keypad is arranged like this:
351
+
352
+ A1 up A3
353
+ left B2 right
354
+ C1 down C3
355
+
356
+ This list is incomplete -- see curses.h for the full list, and use the
357
+ testcurs demo to see what values are actually returned. The above are
358
+ just the keys required by X/Open. In particular, PDCurses defines many
359
+ CTL_ and ALT_ combinations; these are not portable.
360
+
361
+ --------------------------------------------------------------------------