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,414 @@
1
+ /* Public Domain Curses */
2
+
3
+ #include "pdcsdl.h"
4
+
5
+ #include <stdlib.h>
6
+ #ifndef PDC_WIDE
7
+ #include "deffont.h"
8
+ #endif
9
+ #include "deficon.h"
10
+
11
+ #ifdef PDC_WIDE
12
+ # ifndef PDC_FONT_PATH
13
+ # ifdef _WIN32
14
+ #define PDC_FONT_PATH "C:/Windows/Fonts/lucon.ttf"
15
+ # elif defined(__APPLE__)
16
+ #define PDC_FONT_PATH "/Library/Fonts/Courier New.ttf"
17
+ # else
18
+ #define PDC_FONT_PATH "/usr/share/fonts/truetype/freefont/FreeMono.ttf"
19
+ # endif
20
+ # endif
21
+ TTF_Font *pdc_ttffont = NULL;
22
+ int pdc_font_size = 18;
23
+ #endif
24
+
25
+ SDL_Surface *pdc_screen = NULL, *pdc_font = NULL, *pdc_icon = NULL,
26
+ *pdc_back = NULL, *pdc_tileback = NULL;
27
+ int pdc_sheight = 0, pdc_swidth = 0, pdc_yoffset = 0, pdc_xoffset = 0;
28
+
29
+ SDL_Color pdc_color[256];
30
+ Uint32 pdc_mapped[256];
31
+ int pdc_fheight, pdc_fwidth, pdc_flastc;
32
+ bool pdc_own_screen;
33
+
34
+ /* special purpose function keys */
35
+ static int PDC_shutdown_key[PDC_MAX_FUNCTION_KEYS] = { 0, 0, 0, 0, 0 };
36
+
37
+ /* COLOR_PAIR to attribute encoding table. */
38
+
39
+ static struct {short f, b;} atrtab[PDC_COLOR_PAIRS];
40
+
41
+ static void _clean(void)
42
+ {
43
+ #ifdef PDC_WIDE
44
+ if (pdc_ttffont)
45
+ {
46
+ TTF_CloseFont(pdc_ttffont);
47
+ TTF_Quit();
48
+ }
49
+ #endif
50
+ SDL_FreeSurface(pdc_tileback);
51
+ SDL_FreeSurface(pdc_back);
52
+ SDL_FreeSurface(pdc_icon);
53
+ SDL_FreeSurface(pdc_font);
54
+
55
+ SDL_Quit();
56
+ }
57
+
58
+ void PDC_retile(void)
59
+ {
60
+ if (pdc_tileback)
61
+ SDL_FreeSurface(pdc_tileback);
62
+
63
+ pdc_tileback = SDL_DisplayFormat(pdc_screen);
64
+ if (pdc_tileback == NULL)
65
+ return;
66
+
67
+ if (pdc_back)
68
+ {
69
+ SDL_Rect dest;
70
+
71
+ dest.y = 0;
72
+
73
+ while (dest.y < pdc_tileback->h)
74
+ {
75
+ dest.x = 0;
76
+
77
+ while (dest.x < pdc_tileback->w)
78
+ {
79
+ SDL_BlitSurface(pdc_back, 0, pdc_tileback, &dest);
80
+ dest.x += pdc_back->w;
81
+ }
82
+
83
+ dest.y += pdc_back->h;
84
+ }
85
+
86
+ SDL_BlitSurface(pdc_tileback, 0, pdc_screen, 0);
87
+ }
88
+ }
89
+
90
+ void PDC_scr_close(void)
91
+ {
92
+ PDC_LOG(("PDC_scr_close() - called\n"));
93
+ }
94
+
95
+ void PDC_scr_free(void)
96
+ {
97
+ if (SP)
98
+ free(SP);
99
+ }
100
+
101
+ static int default_pdc_swidth = 80, default_pdc_sheight = 25;
102
+
103
+ /* open the physical screen -- allocate SP, miscellaneous intialization */
104
+
105
+ int PDC_scr_open(int argc, char **argv)
106
+ {
107
+ int i, r, g, b;
108
+
109
+ PDC_LOG(("PDC_scr_open() - called\n"));
110
+
111
+ SP = calloc(1, sizeof(SCREEN));
112
+
113
+ if (!SP)
114
+ return ERR;
115
+
116
+ pdc_own_screen = !pdc_screen;
117
+
118
+ if (pdc_own_screen)
119
+ {
120
+ if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER) < 0)
121
+ {
122
+ fprintf(stderr, "Could not start SDL: %s\n", SDL_GetError());
123
+ return ERR;
124
+ }
125
+
126
+ atexit(_clean);
127
+ }
128
+
129
+ #ifdef PDC_WIDE
130
+ if (!pdc_ttffont)
131
+ {
132
+ const char *ptsz, *fname;
133
+
134
+ if (TTF_Init() == -1)
135
+ {
136
+ fprintf(stderr, "Could not start SDL_TTF: %s\n", SDL_GetError());
137
+ return ERR;
138
+ }
139
+
140
+ ptsz = getenv("PDC_FONT_SIZE");
141
+ if (ptsz != NULL)
142
+ pdc_font_size = atoi(ptsz);
143
+ if (pdc_font_size <= 0)
144
+ pdc_font_size = 18;
145
+
146
+ fname = getenv("PDC_FONT");
147
+ pdc_ttffont = TTF_OpenFont(fname ? fname : PDC_FONT_PATH,
148
+ pdc_font_size);
149
+ }
150
+
151
+ if (!pdc_ttffont)
152
+ {
153
+ fprintf(stderr, "Could not load font\n");
154
+ return ERR;
155
+ }
156
+
157
+ TTF_SetFontKerning(pdc_ttffont, 0);
158
+ TTF_SetFontHinting(pdc_ttffont, TTF_HINTING_MONO);
159
+
160
+ SP->mono = FALSE;
161
+ #else
162
+ if (!pdc_font)
163
+ {
164
+ const char *fname = getenv("PDC_FONT");
165
+ pdc_font = SDL_LoadBMP(fname ? fname : "pdcfont.bmp");
166
+ }
167
+
168
+ if (!pdc_font)
169
+ pdc_font = SDL_LoadBMP_RW(SDL_RWFromMem(deffont, sizeof(deffont)), 0);
170
+
171
+ if (!pdc_font)
172
+ {
173
+ fprintf(stderr, "Could not load font\n");
174
+ return ERR;
175
+ }
176
+
177
+ SP->mono = !pdc_font->format->palette;
178
+ #endif
179
+
180
+ if (!SP->mono && !pdc_back)
181
+ {
182
+ const char *bname = getenv("PDC_BACKGROUND");
183
+ pdc_back = SDL_LoadBMP(bname ? bname : "pdcback.bmp");
184
+ }
185
+
186
+ if (!SP->mono && (pdc_back || !pdc_own_screen))
187
+ {
188
+ SP->orig_attr = TRUE;
189
+ SP->orig_fore = COLOR_WHITE;
190
+ SP->orig_back = -1;
191
+ }
192
+ else
193
+ SP->orig_attr = FALSE;
194
+
195
+ #ifdef PDC_WIDE
196
+ TTF_SizeText(pdc_ttffont, "W", &pdc_fwidth, &pdc_fheight);
197
+ #else
198
+ pdc_fheight = pdc_font->h / 8;
199
+ pdc_fwidth = pdc_font->w / 32;
200
+
201
+ if (!SP->mono)
202
+ pdc_flastc = pdc_font->format->palette->ncolors - 1;
203
+ #endif
204
+
205
+ if (pdc_own_screen && !pdc_icon)
206
+ {
207
+ const char *iname = getenv("PDC_ICON");
208
+ pdc_icon = SDL_LoadBMP(iname ? iname : "pdcicon.bmp");
209
+
210
+ if (!pdc_icon)
211
+ pdc_icon = SDL_LoadBMP_RW(SDL_RWFromMem(deficon,
212
+ sizeof(deficon)), 0);
213
+
214
+ if (pdc_icon)
215
+ SDL_WM_SetIcon(pdc_icon, NULL);
216
+ }
217
+
218
+ if (pdc_own_screen)
219
+ {
220
+ const char *env = getenv("PDC_LINES");
221
+ pdc_sheight = (env ? atoi(env) : default_pdc_sheight) * pdc_fheight;
222
+
223
+ env = getenv("PDC_COLS");
224
+ pdc_swidth = (env ? atoi(env) : default_pdc_swidth) * pdc_fwidth;
225
+
226
+ pdc_screen = SDL_SetVideoMode(pdc_swidth, pdc_sheight, 0,
227
+ SDL_SWSURFACE|SDL_ANYFORMAT|SDL_RESIZABLE);
228
+ }
229
+ else
230
+ {
231
+ if (!pdc_sheight)
232
+ pdc_sheight = pdc_screen->h - pdc_yoffset;
233
+
234
+ if (!pdc_swidth)
235
+ pdc_swidth = pdc_screen->w - pdc_xoffset;
236
+ }
237
+
238
+ if (!pdc_screen)
239
+ {
240
+ fprintf(stderr, "Couldn't create a surface: %s\n", SDL_GetError());
241
+ return ERR;
242
+ }
243
+
244
+ if (SP->orig_attr)
245
+ PDC_retile();
246
+
247
+ COLORS = 256; /* we have 256 colors in this flavor of PDCurses */
248
+ for (i = 0; i < 8; i++)
249
+ {
250
+ pdc_color[i].r = (i & COLOR_RED) ? 0xc0 : 0;
251
+ pdc_color[i].g = (i & COLOR_GREEN) ? 0xc0 : 0;
252
+ pdc_color[i].b = (i & COLOR_BLUE) ? 0xc0 : 0;
253
+
254
+ pdc_color[i + 8].r = (i & COLOR_RED) ? 0xff : 0x40;
255
+ pdc_color[i + 8].g = (i & COLOR_GREEN) ? 0xff : 0x40;
256
+ pdc_color[i + 8].b = (i & COLOR_BLUE) ? 0xff : 0x40;
257
+ }
258
+
259
+ /* 256-color xterm extended palette: 216 colors in a
260
+ 6x6x6 color cube, plus 24 (not 50) shades of gray */
261
+ i = 16;
262
+ for( r = 0; r < 6; r++)
263
+ for( g = 0; g < 6; g++)
264
+ for( b = 0; b < 6; b++, i++)
265
+ {
266
+ pdc_color[i].r = ( r ? r * 40 + 55 : 0);
267
+ pdc_color[i].g = ( g ? g * 40 + 55 : 0);
268
+ pdc_color[i].b = ( b ? b * 40 + 55 : 0);
269
+ }
270
+ for( i = 232; i < 256; i++)
271
+ pdc_color[i].r = pdc_color[i].g = pdc_color[i].b = (i - 232) * 10 + 8;
272
+ for (i = 0; i < 256; i++)
273
+ pdc_mapped[i] = SDL_MapRGB(pdc_screen->format, pdc_color[i].r,
274
+ pdc_color[i].g, pdc_color[i].b);
275
+
276
+ SDL_EnableUNICODE(1);
277
+
278
+ PDC_mouse_set();
279
+
280
+ if (pdc_own_screen)
281
+ PDC_set_title(argc ? argv[0] : "PDCurses");
282
+
283
+ SP->lines = PDC_get_rows();
284
+ SP->cols = PDC_get_columns();
285
+
286
+ SP->mouse_wait = PDC_CLICK_PERIOD;
287
+ SP->audible = FALSE;
288
+
289
+ PDC_reset_prog_mode();
290
+
291
+ return OK;
292
+ }
293
+
294
+ /* the core of resize_term() */
295
+
296
+ int PDC_resize_screen(int nlines, int ncols)
297
+ {
298
+ if( !stdscr) /* window hasn't been created yet; we're */
299
+ { /* specifying its size before doing so */
300
+ default_pdc_swidth = ncols;
301
+ default_pdc_sheight = nlines;
302
+ return OK;
303
+ }
304
+
305
+ if (!pdc_own_screen)
306
+ return ERR;
307
+
308
+ if (nlines && ncols)
309
+ {
310
+ pdc_sheight = nlines * pdc_fheight;
311
+ pdc_swidth = ncols * pdc_fwidth;
312
+ }
313
+
314
+ SDL_FreeSurface(pdc_screen);
315
+
316
+ pdc_screen = SDL_SetVideoMode(pdc_swidth, pdc_sheight, 0,
317
+ SDL_SWSURFACE|SDL_ANYFORMAT|SDL_RESIZABLE);
318
+
319
+ if (pdc_tileback)
320
+ PDC_retile();
321
+
322
+ SP->resized = FALSE;
323
+ SP->cursrow = SP->curscol = 0;
324
+
325
+ return OK;
326
+ }
327
+
328
+ void PDC_reset_prog_mode(void)
329
+ {
330
+ PDC_LOG(("PDC_reset_prog_mode() - called.\n"));
331
+
332
+ PDC_flushinp();
333
+ SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
334
+ }
335
+
336
+ void PDC_reset_shell_mode(void)
337
+ {
338
+ PDC_LOG(("PDC_reset_shell_mode() - called.\n"));
339
+
340
+ SDL_EnableKeyRepeat(0, 0);
341
+ PDC_flushinp();
342
+ }
343
+
344
+ void PDC_restore_screen_mode(int i)
345
+ {
346
+ }
347
+
348
+ void PDC_save_screen_mode(int i)
349
+ {
350
+ }
351
+
352
+ void PDC_init_pair(short pair, short fg, short bg)
353
+ {
354
+ atrtab[pair].f = fg;
355
+ atrtab[pair].b = bg;
356
+ }
357
+
358
+ int PDC_pair_content(short pair, short *fg, short *bg)
359
+ {
360
+ *fg = atrtab[pair].f;
361
+ *bg = atrtab[pair].b;
362
+
363
+ return OK;
364
+ }
365
+
366
+ bool PDC_can_change_color(void)
367
+ {
368
+ return TRUE;
369
+ }
370
+
371
+ int PDC_color_content(short color, short *red, short *green, short *blue)
372
+ {
373
+ *red = DIVROUND(pdc_color[color].r * 1000, 255);
374
+ *green = DIVROUND(pdc_color[color].g * 1000, 255);
375
+ *blue = DIVROUND(pdc_color[color].b * 1000, 255);
376
+
377
+ return OK;
378
+ }
379
+
380
+ int PDC_init_color(short color, short red, short green, short blue)
381
+ {
382
+ pdc_color[color].r = DIVROUND(red * 255, 1000);
383
+ pdc_color[color].g = DIVROUND(green * 255, 1000);
384
+ pdc_color[color].b = DIVROUND(blue * 255, 1000);
385
+
386
+ pdc_mapped[color] = SDL_MapRGB(pdc_screen->format, pdc_color[color].r,
387
+ pdc_color[color].g, pdc_color[color].b);
388
+
389
+ wrefresh(curscr);
390
+
391
+ return OK;
392
+ }
393
+
394
+ /* Does nothing in the SDL flavors of PDCurses. That may change, eventually,
395
+ allowing one to limit the range of user-resizable windows. See X11 or Win32a
396
+ versions of this function for details. */
397
+
398
+ void PDC_set_resize_limits( const int new_min_lines, const int new_max_lines,
399
+ const int new_min_cols, const int new_max_cols)
400
+ {
401
+ }
402
+
403
+ /* PDC_set_function_key() does nothing on this platform */
404
+ int PDC_set_function_key( const unsigned function, const int new_key)
405
+ {
406
+ int old_key = -1;
407
+
408
+ if( function < PDC_MAX_FUNCTION_KEYS)
409
+ {
410
+ old_key = PDC_shutdown_key[function];
411
+ PDC_shutdown_key[function] = new_key;
412
+ }
413
+ return( old_key);
414
+ }
@@ -0,0 +1,31 @@
1
+ /* Public Domain Curses */
2
+
3
+ #include <curspriv.h>
4
+
5
+ #include <SDL.h>
6
+ #ifdef PDC_WIDE
7
+ #include <SDL_ttf.h>
8
+ #endif
9
+
10
+ #ifdef PDC_WIDE
11
+ PDCEX TTF_Font *pdc_ttffont;
12
+ PDCEX int pdc_font_size;
13
+ #endif
14
+ PDCEX SDL_Surface *pdc_screen, *pdc_font, *pdc_icon, *pdc_back;
15
+ PDCEX int pdc_sheight, pdc_swidth, pdc_yoffset, pdc_xoffset;
16
+
17
+ extern SDL_Surface *pdc_tileback; /* used to regenerate the background
18
+ of "transparent" cells */
19
+ extern SDL_Color pdc_color[256]; /* colors for font palette */
20
+ extern Uint32 pdc_mapped[256]; /* colors for FillRect(), as
21
+ used in _highlight() */
22
+ extern int pdc_fheight, pdc_fwidth; /* font height and width */
23
+ extern int pdc_flastc; /* font palette's last color
24
+ (treated as the foreground) */
25
+ extern bool pdc_own_screen; /* if pdc_screen was not set
26
+ before initscr(), PDCurses is
27
+ responsible for (owns) it */
28
+ extern Uint32 pdc_lastupdate; /* time of last update, in ticks */
29
+
30
+ void PDC_update_rects(void);
31
+ void PDC_retile(void);
@@ -0,0 +1,64 @@
1
+ /* Public Domain Curses */
2
+
3
+ #include "pdcsdl.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
+ int ret_vis;
39
+
40
+ PDC_LOG(("PDC_curs_set() - called: visibility=%d\n", visibility));
41
+
42
+ ret_vis = SP->visibility;
43
+
44
+ SP->visibility = visibility;
45
+
46
+ PDC_gotoyx(SP->cursrow, SP->curscol);
47
+
48
+ return ret_vis;
49
+ }
50
+
51
+ void PDC_set_title(const char *title)
52
+ {
53
+ PDC_LOG(("PDC_set_title() - called:<%s>\n", title));
54
+
55
+ SDL_WM_SetCaption(title, title);
56
+ }
57
+
58
+ int PDC_set_blink(bool blinkon)
59
+ {
60
+ // if (pdc_color_started) /* We've got 256 colors in this version */
61
+ // COLORS = 16;
62
+
63
+ return blinkon ? ERR : OK;
64
+ }
@@ -0,0 +1,40 @@
1
+ /* Public Domain Curses */
2
+
3
+ #include "pdcsdl.h"
4
+
5
+ void PDC_beep(void)
6
+ {
7
+ PDC_LOG(("PDC_beep() - called\n"));
8
+ }
9
+
10
+ void PDC_napms(int ms)
11
+ {
12
+ PDC_LOG(("PDC_napms() - called: ms=%d\n", ms));
13
+
14
+ PDC_update_rects();
15
+ SDL_PumpEvents();
16
+ SDL_Delay(ms);
17
+ }
18
+
19
+ const char *PDC_sysname(void)
20
+ {
21
+ return "SDL";
22
+ }
23
+
24
+ PDCEX PDC_version_info PDC_version = { PDC_PORT_SDL1,
25
+ PDC_VER_MAJOR, PDC_VER_MINOR, PDC_VER_CHANGE,
26
+ sizeof( chtype),
27
+ /* note that thus far, 'wide' and 'UTF8' versions exist */
28
+ /* only for SDL2, X11, Win32, and Win32a; elsewhere, */
29
+ /* these will be FALSE */
30
+ #ifdef PDC_WIDE
31
+ TRUE,
32
+ #else
33
+ FALSE,
34
+ #endif
35
+ #ifdef PDC_FORCE_UTF8
36
+ TRUE,
37
+ #else
38
+ FALSE,
39
+ #endif
40
+ };
@@ -0,0 +1,79 @@
1
+ /* Here's a simple example of combining SDL and PDCurses functionality.
2
+ The top portion of the window is devoted to SDL, with a four-line
3
+ (assuming the default 8x16 font) stdscr at the bottom.
4
+ */
5
+
6
+ #include <SDL.h>
7
+ #include <curses.h>
8
+ #include <stdlib.h>
9
+ #include <time.h>
10
+
11
+ /* You could #include pdcsdl.h, or just add the relevant declarations
12
+ here: */
13
+
14
+ PDCEX SDL_Surface *pdc_screen;
15
+ PDCEX int pdc_yoffset;
16
+
17
+ int main(int argc, char **argv)
18
+ {
19
+ char inp[60];
20
+ int i, j, seed;
21
+
22
+ seed = time((time_t *)0);
23
+ srand(seed);
24
+
25
+ /* Initialize SDL */
26
+
27
+ if (SDL_Init(SDL_INIT_VIDEO) < 0)
28
+ exit(1);
29
+
30
+ atexit(SDL_Quit);
31
+
32
+ pdc_screen = SDL_SetVideoMode(640, 480, 0, SDL_SWSURFACE|SDL_ANYFORMAT);
33
+
34
+ /* Initialize PDCurses */
35
+
36
+ pdc_yoffset = 416; /* 480 - 4 * 16 */
37
+
38
+ initscr();
39
+ start_color();
40
+ scrollok(stdscr, TRUE);
41
+
42
+ PDC_set_title("PDCurses for SDL");
43
+
44
+ /* Do some SDL stuff */
45
+
46
+ for (i = 640, j = 416; j; i -= 2, j -= 2)
47
+ {
48
+ SDL_Rect dest;
49
+
50
+ dest.x = (640 - i) / 2;
51
+ dest.y = (416 - j) / 2;
52
+ dest.w = i;
53
+ dest.h = j;
54
+
55
+ SDL_FillRect(pdc_screen, &dest,
56
+ SDL_MapRGB(pdc_screen->format, rand() % 256,
57
+ rand() % 256, rand() % 256));
58
+ }
59
+
60
+ SDL_UpdateRect(pdc_screen, 0, 0, 640, 416);
61
+
62
+ /* Do some curses stuff */
63
+
64
+ init_pair(1, COLOR_WHITE + 8, COLOR_BLUE);
65
+ bkgd(COLOR_PAIR(1));
66
+
67
+ addstr("This is a demo of ");
68
+ attron(A_UNDERLINE);
69
+ addstr("PDCurses for SDL");
70
+ attroff(A_UNDERLINE);
71
+ addstr(".\nYour comments here: ");
72
+ getnstr(inp, 59);
73
+ addstr("Press any key to exit.");
74
+
75
+ getch();
76
+ endwin();
77
+
78
+ return 0;
79
+ }
@@ -0,0 +1,76 @@
1
+ cmake_minimum_required(VERSION 3.11)
2
+
3
+ if(NOT CMAKE_BUILD_TYPE)
4
+ set(CMAKE_BUILD_TYPE "MinSizeRel" CACHE STRING "Choose the type of build, options are: Debug, Release, or MinSizeRel." FORCE)
5
+ message(STATUS "No build type specified, defaulting to MinSizeRel.")
6
+ endif()
7
+
8
+ project(sdl2 VERSION "${PROJECT_VERSION}" LANGUAGES C)
9
+ message(STATUS "${PROJECT_NAME} version: ${PROJECT_VERSION}")
10
+
11
+ message(STATUS "SDL2_LIBRARIES = ${SDL2_LIBRARIES}")
12
+ message(STATUS "SDL2_INCLUDE_DIR = ${SDL2_INCLUDE_DIR}")
13
+ message(STATUS "SDL2_LIBRARY_DIR = ${SDL2_LIBRARY_DIR}")
14
+ if(PDC_WIDE)
15
+ message(STATUS "SDL2_TTF_LIBRARY = ${SDL2_TTF_LIBRARY}")
16
+ message(STATUS "SDL2_TTF_INCLUDE_DIR = ${SDL2_TTF_INCLUDE_DIR}")
17
+ message(STATUS "SDL2_TTF_LIBRARY_DIR = ${SDL2_TTF_LIBRARY_DIR}")
18
+ endif()
19
+
20
+ include_directories(${SDL2_INCLUDE_DIR} ${SDL2_TTF_INCLUDE_DIR})
21
+ link_directories(${SDL2_LIBRARY_DIR} ${SDL2_TTF_LIBRARY_DIR})
22
+
23
+ include(project_common)
24
+
25
+ macro (sdl2_app dir targ)
26
+
27
+ set(bin_name "${PROJECT_NAME}_${targ}")
28
+
29
+ if(${targ} STREQUAL "tuidemo")
30
+ set(src_files ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/tuidemo.c ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/tui.c)
31
+ else()
32
+ set(src_files ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/${targ}.c)
33
+ endif()
34
+
35
+ add_executable(${bin_name} ${src_files})
36
+
37
+ if(PDC_WIDE)
38
+ target_link_libraries(${bin_name} ${PDCURSE_PROJ} ${EXTRA_LIBS}
39
+ "${SDL2_LIBRARIES};${SDL2_TTF_LIBRARY};${FT2_LIBRARY};${ZLIB_LIBRARY};${SDL2_DEP_LIBRARIES}")
40
+ else()
41
+ target_link_libraries(${bin_name} ${PDCURSE_PROJ} ${EXTRA_LIBS}
42
+ "${SDL2_LIBRARIES};${SDL2_TTF_DEP_LIBRARIES};${SDL2_DEP_LIBRARIES}")
43
+ endif()
44
+
45
+ add_dependencies(${bin_name} ${PDCURSE_PROJ})
46
+ set_target_properties(${bin_name} PROPERTIES OUTPUT_NAME ${targ})
47
+
48
+ install(TARGETS ${bin_name} RUNTIME DESTINATION ${PDCURSES_DIST}/bin/${PROJECT_NAME} COMPONENT applications)
49
+
50
+ endmacro ()
51
+
52
+ sdl2_app(../demos version)
53
+ sdl2_app(../demos firework)
54
+ sdl2_app(../demos ozdemo)
55
+ sdl2_app(../demos newtest)
56
+ sdl2_app(../demos ptest)
57
+ sdl2_app(../demos rain)
58
+ sdl2_app(../demos testcurs)
59
+ sdl2_app(../demos tuidemo)
60
+ sdl2_app(../demos worm)
61
+ sdl2_app(../demos xmas)
62
+ sdl2_app(./ sdltest)
63
+
64
+ if(WIN32)
65
+ set_target_properties(${PROJECT_NAME}_newtest PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS")
66
+ endif(WIN32)
67
+
68
+ if(PDC_SDL2_DEPS_BUILD)
69
+ if(PDC_WIDE)
70
+ add_dependencies(${PDCURSE_PROJ} sdl2_ext sdl2_ttf_ext)
71
+ else()
72
+ add_dependencies(${PDCURSE_PROJ} sdl2_ext)
73
+ endif()
74
+ endif()
75
+
76
+ set(CPACK_COMPONENTS_ALL applications)