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,194 @@
1
+ /* Public Domain Curses */
2
+
3
+ #include <curspriv.h>
4
+ #include <string.h>
5
+
6
+ # if(CHTYPE_LONG >= 2) /* 64-bit chtypes */
7
+ # define PDC_ATTR_SHIFT 23
8
+ # else
9
+ #ifdef CHTYPE_LONG /* 32-bit chtypes */
10
+ # define PDC_ATTR_SHIFT 19
11
+ #else /* 16-bit chtypes */
12
+ # define PDC_ATTR_SHIFT 8
13
+ #endif
14
+ #endif
15
+
16
+ #if defined(_MSC_VER) || defined(_QC)
17
+ # define MSC 1
18
+ #endif
19
+
20
+ #if defined(__PACIFIC__) && !defined(__SMALL__)
21
+ # define __SMALL__
22
+ #endif
23
+
24
+ #if defined(__HIGHC__) || MSC
25
+ # include <bios.h>
26
+ #endif
27
+
28
+ /*----------------------------------------------------------------------
29
+ * MEMORY MODEL SUPPORT:
30
+ *
31
+ * MODELS
32
+ * TINY cs,ds,ss all in 1 segment (not enough memory!)
33
+ * SMALL cs:1 segment, ds:1 segment
34
+ * MEDIUM cs:many segments, ds:1 segment
35
+ * COMPACT cs:1 segment, ds:many segments
36
+ * LARGE cs:many segments, ds:many segments
37
+ * HUGE cs:many segments, ds:segments > 64K
38
+ */
39
+
40
+ #ifdef __TINY__
41
+ # define SMALL 1
42
+ #endif
43
+ #ifdef __SMALL__
44
+ # define SMALL 1
45
+ #endif
46
+ #ifdef __MEDIUM__
47
+ # define MEDIUM 1
48
+ #endif
49
+ #ifdef __COMPACT__
50
+ # define COMPACT 1
51
+ #endif
52
+ #ifdef __LARGE__
53
+ # define LARGE 1
54
+ #endif
55
+ #ifdef __HUGE__
56
+ # define HUGE 1
57
+ #endif
58
+
59
+ #include <dos.h>
60
+
61
+ extern unsigned char *pdc_atrtab;
62
+ extern int pdc_adapter;
63
+ extern int pdc_scrnmode;
64
+ extern int pdc_font;
65
+ extern bool pdc_direct_video;
66
+ extern bool pdc_bogus_adapter;
67
+ extern unsigned pdc_video_seg;
68
+ extern unsigned pdc_video_ofs;
69
+
70
+ #ifdef __DJGPP__ /* Note: works only in plain DOS... */
71
+ # if DJGPP == 2
72
+ # define _FAR_POINTER(s,o) ((((int)(s)) << 4) + ((int)(o)))
73
+ # else
74
+ # define _FAR_POINTER(s,o) (0xe0000000 + (((int)(s)) << 4) + ((int)(o)))
75
+ # endif
76
+ # define _FP_SEGMENT(p) (unsigned short)((((long)p) >> 4) & 0xffff)
77
+ #else
78
+ # ifdef __TURBOC__
79
+ # define _FAR_POINTER(s,o) MK_FP(s,o)
80
+ # else
81
+ # if defined(__WATCOMC__) && defined(__FLAT__)
82
+ # define _FAR_POINTER(s,o) ((((int)(s)) << 4) + ((int)(o)))
83
+ # else
84
+ # define _FAR_POINTER(s,o) (((long)s << 16) | (long)o)
85
+ # endif
86
+ # endif
87
+ # define _FP_SEGMENT(p) (unsigned short)(((long)p) >> 4)
88
+ #endif
89
+ #define _FP_OFFSET(p) ((unsigned short)p & 0x000f)
90
+
91
+ #ifdef __DJGPP__
92
+ # include <sys/movedata.h>
93
+ unsigned char getdosmembyte(int offs);
94
+ unsigned short getdosmemword(int offs);
95
+ unsigned long getdosmemdword(int offs);
96
+ void setdosmembyte(int offs, unsigned char b);
97
+ void setdosmemword(int offs, unsigned short w);
98
+ #else
99
+ # if SMALL || MEDIUM || MSC
100
+ # define PDC_FAR far
101
+ # else
102
+ # define PDC_FAR
103
+ # endif
104
+ # define getdosmembyte(offs) \
105
+ (*((unsigned char PDC_FAR *) _FAR_POINTER(0,offs)))
106
+ # define getdosmemword(offs) \
107
+ (*((unsigned short PDC_FAR *) _FAR_POINTER(0,offs)))
108
+ # define getdosmemdword(offs) \
109
+ (*((unsigned long PDC_FAR *) _FAR_POINTER(0,offs)))
110
+ # define setdosmembyte(offs,x) \
111
+ (*((unsigned char PDC_FAR *) _FAR_POINTER(0,offs)) = (x))
112
+ # define setdosmemword(offs,x) \
113
+ (*((unsigned short PDC_FAR *) _FAR_POINTER(0,offs)) = (x))
114
+ #endif
115
+
116
+ #if defined(__WATCOMC__) && defined(__386__)
117
+
118
+ typedef union
119
+ {
120
+ struct
121
+ {
122
+ unsigned long edi, esi, ebp, res, ebx, edx, ecx, eax;
123
+ } d;
124
+
125
+ struct
126
+ {
127
+ unsigned short di, di_hi, si, si_hi, bp, bp_hi, res, res_hi,
128
+ bx, bx_hi, dx, dx_hi, cx, cx_hi, ax, ax_hi,
129
+ flags, es, ds, fs, gs, ip, cs, sp, ss;
130
+ } w;
131
+
132
+ struct
133
+ {
134
+ unsigned char edi[4], esi[4], ebp[4], res[4],
135
+ bl, bh, ebx_b2, ebx_b3, dl, dh, edx_b2, edx_b3,
136
+ cl, ch, ecx_b2, ecx_b3, al, ah, eax_b2, eax_b3;
137
+ } h;
138
+ } pdc_dpmi_regs;
139
+
140
+ void PDC_dpmi_int(int, pdc_dpmi_regs *);
141
+
142
+ #endif
143
+
144
+ #ifdef __DJGPP__
145
+ # include <dpmi.h>
146
+ # define PDCREGS __dpmi_regs
147
+ # define PDCINT(vector, regs) __dpmi_int(vector, &regs)
148
+ #else
149
+ # ifdef __WATCOMC__
150
+ # ifdef __386__
151
+ # define PDCREGS pdc_dpmi_regs
152
+ # define PDCINT(vector, regs) PDC_dpmi_int(vector, &regs)
153
+ # else
154
+ # define PDCREGS union REGPACK
155
+ # define PDCINT(vector, regs) intr(vector, &regs)
156
+ # endif
157
+ # else
158
+ # define PDCREGS union REGS
159
+ # define PDCINT(vector, regs) int86(vector, &regs, &regs)
160
+ # endif
161
+ #endif
162
+
163
+ /* Wide registers in REGS: w or x? */
164
+
165
+ #ifdef __WATCOMC__
166
+ # define W w
167
+ #else
168
+ # define W x
169
+ #endif
170
+
171
+ /* Monitor (terminal) type information */
172
+
173
+ enum
174
+ {
175
+ _NONE, _MDA, _CGA,
176
+ _EGACOLOR = 0x04, _EGAMONO,
177
+ _VGACOLOR = 0x07, _VGAMONO,
178
+ _MCGACOLOR = 0x0a, _MCGAMONO,
179
+ _MDS_GENIUS = 0x30
180
+ };
181
+
182
+ /* Text-mode font size information */
183
+
184
+ enum
185
+ {
186
+ _FONT8 = 8,
187
+ _FONT14 = 14,
188
+ _FONT15, /* GENIUS */
189
+ _FONT16
190
+ };
191
+
192
+ #ifdef __PACIFIC__
193
+ void movedata(unsigned, unsigned, unsigned, unsigned, unsigned);
194
+ #endif
@@ -0,0 +1,98 @@
1
+ /* Public Domain Curses */
2
+
3
+ #include "pdcdos.h"
4
+
5
+ #include <stdlib.h>
6
+
7
+ /* return width of screen/viewport */
8
+
9
+ int PDC_get_columns(void)
10
+ {
11
+ PDCREGS regs;
12
+ int cols;
13
+ const char *env_cols;
14
+
15
+ PDC_LOG(("PDC_get_columns() - called\n"));
16
+
17
+ /* use the value from COLS environment variable, if set. MH 10-Jun-92 */
18
+ /* and use the minimum of COLS and return from int10h MH 18-Jun-92 */
19
+
20
+ regs.h.ah = 0x0f;
21
+ PDCINT(0x10, regs);
22
+ cols = (int)regs.h.ah;
23
+
24
+ env_cols = getenv("COLS");
25
+
26
+ if (env_cols)
27
+ cols = min(atoi(env_cols), cols);
28
+
29
+ PDC_LOG(("PDC_get_columns() - returned: cols %d\n", cols));
30
+
31
+ return cols;
32
+ }
33
+
34
+ /* get the cursor size/shape */
35
+
36
+ int PDC_get_cursor_mode(void)
37
+ {
38
+ PDC_LOG(("PDC_get_cursor_mode() - called\n"));
39
+
40
+ return getdosmemword(0x460);
41
+ }
42
+
43
+ /* return number of screen rows */
44
+
45
+ int PDC_get_rows(void)
46
+ {
47
+ const char *env_rows;
48
+ int rows;
49
+
50
+ PDC_LOG(("PDC_get_rows() - called\n"));
51
+
52
+ /* use the value from LINES environment variable, if set. MH 10-Jun-92 */
53
+ /* and use the minimum of LINES and *ROWS. MH 18-Jun-92 */
54
+
55
+ rows = getdosmembyte(0x484) + 1;
56
+ env_rows = getenv("LINES");
57
+
58
+ if (env_rows)
59
+ rows = min(atoi(env_rows), rows);
60
+
61
+ if (rows == 1 && pdc_adapter == _MDS_GENIUS)
62
+ rows = 66;
63
+ if (rows == 1 && pdc_adapter == _MDA)
64
+ rows = 25;
65
+
66
+ if (rows == 1)
67
+ {
68
+ rows = 25;
69
+ pdc_direct_video = FALSE;
70
+ }
71
+
72
+ switch (pdc_adapter)
73
+ {
74
+ case _EGACOLOR:
75
+ case _EGAMONO:
76
+ switch (rows)
77
+ {
78
+ case 25:
79
+ case 43:
80
+ break;
81
+ default:
82
+ rows = 25;
83
+ }
84
+ break;
85
+
86
+ case _VGACOLOR:
87
+ case _VGAMONO:
88
+ break;
89
+
90
+ default:
91
+ rows = 25;
92
+ break;
93
+ }
94
+
95
+ PDC_LOG(("PDC_get_rows() - returned: rows %d\n", rows));
96
+
97
+ return rows;
98
+ }
@@ -0,0 +1,513 @@
1
+ /* Public Domain Curses */
2
+
3
+ /* MS C doesn't return flags from int86() */
4
+ #ifdef MSC
5
+ # define USE_KBHIT
6
+ #endif
7
+
8
+ #ifdef USE_KBHIT
9
+ # include <conio.h>
10
+ #endif
11
+
12
+ #include "pdcdos.h"
13
+
14
+ /*man-start**************************************************************
15
+
16
+ pdckbd
17
+ ------
18
+
19
+ ### Synopsis
20
+
21
+ unsigned long PDC_get_input_fd(void);
22
+
23
+ ### Description
24
+
25
+ PDC_get_input_fd() returns the file descriptor that PDCurses
26
+ reads its input from. It can be used for select().
27
+
28
+ ### Portability
29
+ X/Open BSD SYS V
30
+ PDC_get_input_fd - - -
31
+
32
+ **man-end****************************************************************/
33
+
34
+ #ifdef __DJGPP__
35
+ # include <fcntl.h>
36
+ # include <io.h>
37
+ # include <signal.h>
38
+ #endif
39
+
40
+ /************************************************************************
41
+ * Table for key code translation of function keys in keypad mode *
42
+ * These values are for strict IBM keyboard compatibles only *
43
+ ************************************************************************/
44
+
45
+ static short key_table[] =
46
+ {
47
+ -1, ALT_ESC, -1, 0,
48
+ -1, -1, -1, -1,
49
+ -1, -1, -1, -1,
50
+ -1, -1, ALT_BKSP, KEY_BTAB,
51
+ ALT_Q, ALT_W, ALT_E, ALT_R,
52
+ ALT_T, ALT_Y, ALT_U, ALT_I,
53
+ ALT_O, ALT_P, ALT_LBRACKET, ALT_RBRACKET,
54
+ ALT_ENTER, -1, ALT_A, ALT_S,
55
+ ALT_D, ALT_F, ALT_G, ALT_H,
56
+ ALT_J, ALT_K, ALT_L, ALT_SEMICOLON,
57
+ ALT_FQUOTE, ALT_BQUOTE, -1, ALT_BSLASH,
58
+ ALT_Z, ALT_X, ALT_C, ALT_V,
59
+ ALT_B, ALT_N, ALT_M, ALT_COMMA,
60
+ ALT_STOP, ALT_FSLASH, -1, ALT_PADSTAR,
61
+ -1, -1, -1, KEY_F(1),
62
+ KEY_F(2), KEY_F(3), KEY_F(4), KEY_F(5),
63
+ KEY_F(6), KEY_F(7), KEY_F(8), KEY_F(9),
64
+ KEY_F(10), -1, -1, KEY_HOME,
65
+ KEY_UP, KEY_PPAGE, ALT_PADMINUS, KEY_LEFT,
66
+ KEY_B2, KEY_RIGHT, ALT_PADPLUS, KEY_END,
67
+ KEY_DOWN, KEY_NPAGE, KEY_IC, KEY_DC,
68
+ KEY_F(13), KEY_F(14), KEY_F(15), KEY_F(16),
69
+ KEY_F(17), KEY_F(18), KEY_F(19), KEY_F(20),
70
+ KEY_F(21), KEY_F(22), KEY_F(25), KEY_F(26),
71
+ KEY_F(27), KEY_F(28), KEY_F(29), KEY_F(30),
72
+ KEY_F(31), KEY_F(32), KEY_F(33), KEY_F(34),
73
+ KEY_F(37), KEY_F(38), KEY_F(39), KEY_F(40),
74
+ KEY_F(41), KEY_F(42), KEY_F(43), KEY_F(44),
75
+ KEY_F(45), KEY_F(46), -1, CTL_LEFT,
76
+ CTL_RIGHT, CTL_END, CTL_PGDN, CTL_HOME,
77
+ ALT_1, ALT_2, ALT_3, ALT_4,
78
+ ALT_5, ALT_6, ALT_7, ALT_8,
79
+ ALT_9, ALT_0, ALT_MINUS, ALT_EQUAL,
80
+ CTL_PGUP, KEY_F(11), KEY_F(12), KEY_F(23),
81
+ KEY_F(24), KEY_F(35), KEY_F(36), KEY_F(47),
82
+ KEY_F(48), CTL_UP, CTL_PADMINUS, CTL_PADCENTER,
83
+ CTL_PADPLUS, CTL_DOWN, CTL_INS, CTL_DEL,
84
+ CTL_TAB, CTL_PADSLASH, CTL_PADSTAR, ALT_HOME,
85
+ ALT_UP, ALT_PGUP, -1, ALT_LEFT,
86
+ -1, ALT_RIGHT, -1, ALT_END,
87
+ ALT_DOWN, ALT_PGDN, ALT_INS, ALT_DEL,
88
+ ALT_PADSLASH, ALT_TAB, ALT_PADENTER, -1
89
+ };
90
+
91
+ unsigned long pdc_key_modifiers = 0L;
92
+
93
+ static struct {unsigned short pressed, released;} button[3];
94
+
95
+ static bool mouse_avail = FALSE, mouse_vis = FALSE, mouse_moved = FALSE,
96
+ mouse_button = FALSE, key_pressed = FALSE;
97
+
98
+ static unsigned char mouse_scroll = 0;
99
+ static PDCREGS ms_regs, old_ms;
100
+ static unsigned short shift_status, old_shift = 0;
101
+ static unsigned char keyboard_function = 0xff, shift_function = 0xff,
102
+ check_function = 0xff;
103
+
104
+ static const unsigned short button_map[3] = {0, 2, 1};
105
+
106
+ unsigned long PDC_get_input_fd(void)
107
+ {
108
+ PDC_LOG(("PDC_get_input_fd() - called\n"));
109
+
110
+ return (unsigned long)fileno(stdin);
111
+ }
112
+
113
+ void PDC_set_keyboard_binary(bool on)
114
+ {
115
+ PDC_LOG(("PDC_set_keyboard_binary() - called\n"));
116
+
117
+ #ifdef __DJGPP__
118
+ setmode(fileno(stdin), on ? O_BINARY : O_TEXT);
119
+ signal(SIGINT, on ? SIG_IGN : SIG_DFL);
120
+ #endif
121
+ }
122
+
123
+ /* check if a key or mouse event is waiting */
124
+
125
+ bool PDC_check_key(void)
126
+ {
127
+ PDCREGS regs;
128
+
129
+ if (shift_function == 0xff)
130
+ {
131
+ int scan;
132
+
133
+ /* get shift status for all keyboards */
134
+
135
+ regs.h.ah = 0x02;
136
+ PDCINT(0x16, regs);
137
+ scan = regs.h.al;
138
+
139
+ /* get shift status for enhanced keyboards */
140
+
141
+ regs.h.ah = 0x12;
142
+ PDCINT(0x16, regs);
143
+
144
+ if (scan == regs.h.al && getdosmembyte(0x496) == 0x10)
145
+ {
146
+ keyboard_function = 0x10;
147
+ check_function = 0x11;
148
+ shift_function = 0x12;
149
+ }
150
+ else
151
+ {
152
+ keyboard_function = 0;
153
+ check_function = 1;
154
+ shift_function = 2;
155
+ }
156
+ }
157
+
158
+ regs.h.ah = shift_function;
159
+ PDCINT(0x16, regs);
160
+
161
+ shift_status = regs.W.ax;
162
+
163
+ if (mouse_vis)
164
+ {
165
+ unsigned short i;
166
+
167
+ ms_regs.W.ax = 3;
168
+ PDCINT(0x33, ms_regs);
169
+
170
+ mouse_button = FALSE;
171
+
172
+ for (i = 0; i < 3; i++)
173
+ {
174
+ regs.W.ax = 6;
175
+ regs.W.bx = button_map[i];
176
+ PDCINT(0x33, regs);
177
+ button[i].released = regs.W.bx;
178
+ if (regs.W.bx)
179
+ {
180
+ ms_regs.W.cx = regs.W.cx;
181
+ ms_regs.W.dx = regs.W.dx;
182
+ mouse_button = TRUE;
183
+ }
184
+
185
+ regs.W.ax = 5;
186
+ regs.W.bx = button_map[i];
187
+ PDCINT(0x33, regs);
188
+ button[i].pressed = regs.W.bx;
189
+ if (regs.W.bx)
190
+ {
191
+ ms_regs.W.cx = regs.W.cx;
192
+ ms_regs.W.dx = regs.W.dx;
193
+ mouse_button = TRUE;
194
+ }
195
+ }
196
+
197
+ mouse_scroll = ms_regs.h.bh;
198
+
199
+ mouse_moved = !mouse_button && ms_regs.h.bl &&
200
+ ms_regs.h.bl == old_ms.h.bl &&
201
+ (((ms_regs.W.cx ^ old_ms.W.cx) >> 3) ||
202
+ ((ms_regs.W.dx ^ old_ms.W.dx) >> 3));
203
+
204
+ if (mouse_scroll || mouse_button || mouse_moved)
205
+ return TRUE;
206
+ }
207
+
208
+ if (old_shift && !shift_status) /* modifier released */
209
+ {
210
+ if (!key_pressed && SP->return_key_modifiers)
211
+ return TRUE;
212
+ }
213
+ else if (!old_shift && shift_status) /* modifier pressed */
214
+ key_pressed = FALSE;
215
+
216
+ old_shift = shift_status;
217
+
218
+ #ifndef USE_KBHIT
219
+ regs.h.ah = check_function;
220
+ PDCINT(0x16, regs);
221
+
222
+ return !(regs.W.flags & 64);
223
+ #else
224
+ return kbhit();
225
+ #endif
226
+ }
227
+
228
+ static int _process_mouse_events(void)
229
+ {
230
+ int i;
231
+ short shift_flags = 0;
232
+
233
+ memset(&pdc_mouse_status, 0, sizeof(pdc_mouse_status));
234
+
235
+ key_pressed = TRUE;
236
+ old_shift = shift_status;
237
+ SP->key_code = TRUE;
238
+
239
+ /* Set shift modifiers */
240
+
241
+ if (shift_status & 3)
242
+ shift_flags |= BUTTON_SHIFT;
243
+
244
+ if (shift_status & 4)
245
+ shift_flags |= BUTTON_CONTROL;
246
+
247
+ if (shift_status & 8)
248
+ shift_flags |= BUTTON_ALT;
249
+
250
+ /* Scroll wheel support for CuteMouse */
251
+
252
+ if (mouse_scroll)
253
+ {
254
+ pdc_mouse_status.changes = mouse_scroll & 0x80 ?
255
+ PDC_MOUSE_WHEEL_UP : PDC_MOUSE_WHEEL_DOWN;
256
+
257
+ pdc_mouse_status.x = -1;
258
+ pdc_mouse_status.y = -1;
259
+
260
+ return KEY_MOUSE;
261
+ }
262
+
263
+ if (mouse_moved)
264
+ {
265
+ pdc_mouse_status.changes = PDC_MOUSE_MOVED;
266
+
267
+ for (i = 0; i < 3; i++)
268
+ {
269
+ if (ms_regs.h.bl & (1 << button_map[i]))
270
+ {
271
+ pdc_mouse_status.button[i] = BUTTON_MOVED | shift_flags;
272
+ pdc_mouse_status.changes |= (1 << i);
273
+ }
274
+ }
275
+ }
276
+ else /* button event */
277
+ {
278
+ for (i = 0; i < 3; i++)
279
+ {
280
+ if (button[i].pressed)
281
+ {
282
+ /* Check for a click -- a PRESS followed
283
+ immediately by a release */
284
+
285
+ if (!button[i].released)
286
+ {
287
+ if (SP->mouse_wait)
288
+ {
289
+ PDCREGS regs;
290
+
291
+ napms(SP->mouse_wait);
292
+
293
+ regs.W.ax = 6;
294
+ regs.W.bx = button_map[i];
295
+ PDCINT(0x33, regs);
296
+
297
+ pdc_mouse_status.button[i] = regs.W.bx ?
298
+ BUTTON_CLICKED : BUTTON_PRESSED;
299
+ }
300
+ else
301
+ pdc_mouse_status.button[i] = BUTTON_PRESSED;
302
+ }
303
+ else
304
+ pdc_mouse_status.button[i] = BUTTON_CLICKED;
305
+ }
306
+
307
+ if (button[i].pressed || button[i].released)
308
+ {
309
+ pdc_mouse_status.button[i] |= shift_flags;
310
+ pdc_mouse_status.changes |= (1 << i);
311
+ }
312
+ }
313
+ }
314
+
315
+ pdc_mouse_status.x = ms_regs.W.cx >> 3;
316
+ pdc_mouse_status.y = ms_regs.W.dx >> 3;
317
+
318
+ old_ms = ms_regs;
319
+
320
+ return KEY_MOUSE;
321
+ }
322
+
323
+ /* return the next available key or mouse event */
324
+
325
+ int PDC_get_key(void)
326
+ {
327
+ PDCREGS regs;
328
+ int key, scan;
329
+
330
+ pdc_key_modifiers = 0;
331
+
332
+ if (mouse_vis && (mouse_scroll || mouse_button || mouse_moved))
333
+ return _process_mouse_events();
334
+
335
+ /* Return modifiers as keys? */
336
+
337
+ if (old_shift && !shift_status)
338
+ {
339
+ key = -1;
340
+
341
+ if (old_shift & 1)
342
+ key = KEY_SHIFT_R;
343
+
344
+ if (old_shift & 2)
345
+ key = KEY_SHIFT_L;
346
+
347
+ if (shift_function == 0x12)
348
+ {
349
+ if (old_shift & 0x400)
350
+ key = KEY_CONTROL_R;
351
+
352
+ if (old_shift & 0x100)
353
+ key = KEY_CONTROL_L;
354
+
355
+ if (old_shift & 0x800)
356
+ key = KEY_ALT_R;
357
+
358
+ if (old_shift & 0x200)
359
+ key = KEY_ALT_L;
360
+ }
361
+ else
362
+ {
363
+ if (old_shift & 4)
364
+ key = KEY_CONTROL_R;
365
+
366
+ if (old_shift & 8)
367
+ key = KEY_ALT_R;
368
+ }
369
+
370
+ key_pressed = FALSE;
371
+ old_shift = shift_status;
372
+
373
+ SP->key_code = TRUE;
374
+ return key;
375
+ }
376
+
377
+ regs.h.ah = keyboard_function;
378
+ PDCINT(0x16, regs);
379
+ key = regs.h.al;
380
+ scan = regs.h.ah;
381
+
382
+ if (SP->save_key_modifiers)
383
+ {
384
+ if (shift_status & 3)
385
+ pdc_key_modifiers |= PDC_KEY_MODIFIER_SHIFT;
386
+
387
+ if (shift_status & 4)
388
+ pdc_key_modifiers |= PDC_KEY_MODIFIER_CONTROL;
389
+
390
+ if (shift_status & 8)
391
+ pdc_key_modifiers |= PDC_KEY_MODIFIER_ALT;
392
+
393
+ if (shift_status & 0x20)
394
+ pdc_key_modifiers |= PDC_KEY_MODIFIER_NUMLOCK;
395
+ }
396
+
397
+ if (scan == 0x1c && key == 0x0a) /* ^Enter */
398
+ key = CTL_ENTER;
399
+ else if (scan == 0xe0 && key == 0x0d) /* PadEnter */
400
+ key = PADENTER;
401
+ else if (scan == 0xe0 && key == 0x0a) /* ^PadEnter */
402
+ key = CTL_PADENTER;
403
+ else if (scan == 0x37 && key == 0x2a) /* Star */
404
+ key = PADSTAR;
405
+ else if (scan == 0x4a && key == 0x2d) /* Minus */
406
+ key = PADMINUS;
407
+ else if (scan == 0x4e && key == 0x2b) /* Plus */
408
+ key = PADPLUS;
409
+ else if (scan == 0xe0 && key == 0x2f) /* Slash */
410
+ key = PADSLASH;
411
+ else if (key == 0x00 || (key == 0xe0 && scan > 53 && scan != 86))
412
+ key = (scan > 0xa7) ? -1 : key_table[scan];
413
+
414
+ if (shift_status & 3)
415
+ {
416
+ switch (key)
417
+ {
418
+ case KEY_HOME: /* Shift Home */
419
+ key = KEY_SHOME;
420
+ break;
421
+ case KEY_UP: /* Shift Up */
422
+ key = KEY_SUP;
423
+ break;
424
+ case KEY_PPAGE: /* Shift PgUp */
425
+ key = KEY_SPREVIOUS;
426
+ break;
427
+ case KEY_LEFT: /* Shift Left */
428
+ key = KEY_SLEFT;
429
+ break;
430
+ case KEY_RIGHT: /* Shift Right */
431
+ key = KEY_SRIGHT;
432
+ break;
433
+ case KEY_END: /* Shift End */
434
+ key = KEY_SEND;
435
+ break;
436
+ case KEY_DOWN: /* Shift Down */
437
+ key = KEY_SDOWN;
438
+ break;
439
+ case KEY_NPAGE: /* Shift PgDn */
440
+ key = KEY_SNEXT;
441
+ break;
442
+ case KEY_IC: /* Shift Ins */
443
+ key = KEY_SIC;
444
+ break;
445
+ case KEY_DC: /* Shift Del */
446
+ key = KEY_SDC;
447
+ }
448
+ }
449
+
450
+ key_pressed = TRUE;
451
+ SP->key_code = ((unsigned)key >= 256);
452
+
453
+ return key;
454
+ }
455
+
456
+ /* discard any pending keyboard or mouse input -- this is the core
457
+ routine for flushinp() */
458
+
459
+ void PDC_flushinp(void)
460
+ {
461
+ PDC_LOG(("PDC_flushinp() - called\n"));
462
+
463
+ /* Force the BIOS keyboard buffer head and tail pointers to be
464
+ the same... Real nasty trick... */
465
+
466
+ setdosmemword(0x41a, getdosmemword(0x41c));
467
+ }
468
+
469
+ int PDC_mouse_set(void)
470
+ {
471
+ PDCREGS regs;
472
+ unsigned long mbe = SP->_trap_mbe;
473
+
474
+ if (mbe && !mouse_avail)
475
+ {
476
+ regs.W.ax = 0;
477
+ PDCINT(0x33, regs);
478
+
479
+ mouse_avail = !!(regs.W.ax);
480
+ }
481
+
482
+ if (mbe)
483
+ {
484
+ if (mouse_avail && !mouse_vis)
485
+ {
486
+ memset(&old_ms, 0, sizeof(old_ms));
487
+
488
+ regs.W.ax = 1;
489
+ PDCINT(0x33, regs);
490
+
491
+ mouse_vis = TRUE;
492
+ }
493
+ }
494
+ else
495
+ {
496
+ if (mouse_avail && mouse_vis)
497
+ {
498
+ regs.W.ax = 2;
499
+ PDCINT(0x33, regs);
500
+
501
+ mouse_vis = FALSE;
502
+ }
503
+ }
504
+
505
+ return (mouse_avail || !mbe) ? OK : ERR;
506
+ }
507
+
508
+ int PDC_modifiers_set(void)
509
+ {
510
+ key_pressed = FALSE;
511
+
512
+ return OK;
513
+ }