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,443 @@
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_Window *pdc_window = NULL;
26
+ SDL_Surface *pdc_screen = NULL, *pdc_font = NULL, *pdc_icon = NULL,
27
+ *pdc_back = NULL, *pdc_tileback = NULL;
28
+ int pdc_sheight = 0, pdc_swidth = 0, pdc_yoffset = 0, pdc_xoffset = 0;
29
+
30
+ SDL_Color pdc_color[256];
31
+ Uint32 pdc_mapped[256];
32
+ int pdc_fheight, pdc_fwidth, pdc_flastc;
33
+ bool pdc_own_window;
34
+
35
+ /* special purpose function keys */
36
+ static int PDC_shutdown_key[PDC_MAX_FUNCTION_KEYS] = { 0, 0, 0, 0, 0 };
37
+
38
+ /* COLOR_PAIR to attribute encoding table. */
39
+
40
+ static struct {short f, b;} atrtab[PDC_COLOR_PAIRS];
41
+
42
+ static void _clean(void)
43
+ {
44
+ #ifdef PDC_WIDE
45
+ if (pdc_ttffont)
46
+ {
47
+ TTF_CloseFont(pdc_ttffont);
48
+ TTF_Quit();
49
+ }
50
+ #endif
51
+ SDL_FreeSurface(pdc_tileback);
52
+ SDL_FreeSurface(pdc_back);
53
+ SDL_FreeSurface(pdc_icon);
54
+ SDL_FreeSurface(pdc_font);
55
+ SDL_DestroyWindow(pdc_window);
56
+ SDL_Quit();
57
+ }
58
+
59
+ void PDC_retile(void)
60
+ {
61
+ if (pdc_tileback)
62
+ SDL_FreeSurface(pdc_tileback);
63
+
64
+ pdc_tileback = SDL_ConvertSurface(pdc_screen, pdc_screen->format, 0);
65
+ if (pdc_tileback == NULL)
66
+ return;
67
+
68
+ if (pdc_back)
69
+ {
70
+ SDL_Rect dest;
71
+
72
+ dest.y = 0;
73
+
74
+ while (dest.y < pdc_tileback->h)
75
+ {
76
+ dest.x = 0;
77
+
78
+ while (dest.x < pdc_tileback->w)
79
+ {
80
+ SDL_BlitSurface(pdc_back, 0, pdc_tileback, &dest);
81
+ dest.x += pdc_back->w;
82
+ }
83
+
84
+ dest.y += pdc_back->h;
85
+ }
86
+
87
+ SDL_BlitSurface(pdc_tileback, 0, pdc_screen, 0);
88
+ }
89
+ }
90
+
91
+ void PDC_scr_close(void)
92
+ {
93
+ PDC_LOG(("PDC_scr_close() - called\n"));
94
+ }
95
+
96
+ void PDC_scr_free(void)
97
+ {
98
+ if (SP)
99
+ free(SP);
100
+ }
101
+
102
+ /* This is called twice a second, in a separate thread, and 'pushes' an
103
+ event to the main thread. See https://wiki.libsdl.org/SDL_AddTimer for
104
+ more info. The result redraws cursor and blinking text every 500 ms. */
105
+
106
+ Uint32 timer_callback( Uint32 interval, void *param)
107
+ {
108
+ SDL_Event event;
109
+
110
+ event.type = SDL_USEREVENT;
111
+ SDL_PushEvent( &event);
112
+ return( interval);
113
+ }
114
+
115
+ static int default_pdc_swidth = 80, default_pdc_sheight = 25;
116
+
117
+ /* open the physical screen -- allocate SP, miscellaneous intialization */
118
+
119
+ int PDC_scr_open(int argc, char **argv)
120
+ {
121
+ int i, r, g, b;
122
+
123
+ PDC_LOG(("PDC_scr_open() - called\n"));
124
+
125
+ SP = calloc(1, sizeof(SCREEN));
126
+
127
+ if (!SP)
128
+ return ERR;
129
+
130
+ pdc_own_window = !pdc_window;
131
+
132
+ if (pdc_own_window)
133
+ {
134
+ if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_EVENTS) < 0)
135
+ {
136
+ fprintf(stderr, "Could not start SDL: %s\n", SDL_GetError());
137
+ return ERR;
138
+ }
139
+ SDL_AddTimer( 500, timer_callback, NULL); /* 500 millisec blink */
140
+
141
+ atexit(_clean);
142
+ }
143
+
144
+ #ifdef PDC_WIDE
145
+ if (!pdc_ttffont)
146
+ {
147
+ const char *ptsz, *fname;
148
+
149
+ if (TTF_Init() == -1)
150
+ {
151
+ fprintf(stderr, "Could not start SDL_TTF: %s\n", SDL_GetError());
152
+ return ERR;
153
+ }
154
+
155
+ ptsz = getenv("PDC_FONT_SIZE");
156
+ if (ptsz != NULL)
157
+ pdc_font_size = atoi(ptsz);
158
+ if (pdc_font_size <= 0)
159
+ pdc_font_size = 18;
160
+
161
+ fname = getenv("PDC_FONT");
162
+ pdc_ttffont = TTF_OpenFont(fname ? fname : PDC_FONT_PATH,
163
+ pdc_font_size);
164
+ }
165
+
166
+ if (!pdc_ttffont)
167
+ {
168
+ fprintf(stderr, "Could not load font\n");
169
+ return ERR;
170
+ }
171
+
172
+ TTF_SetFontKerning(pdc_ttffont, 0);
173
+ TTF_SetFontHinting(pdc_ttffont, TTF_HINTING_MONO);
174
+
175
+ SP->mono = FALSE;
176
+ #else
177
+ if (!pdc_font)
178
+ {
179
+ const char *fname = getenv("PDC_FONT");
180
+ pdc_font = SDL_LoadBMP(fname ? fname : "pdcfont.bmp");
181
+ }
182
+
183
+ if (!pdc_font)
184
+ pdc_font = SDL_LoadBMP_RW(SDL_RWFromMem(deffont, sizeof(deffont)), 0);
185
+
186
+ if (!pdc_font)
187
+ {
188
+ fprintf(stderr, "Could not load font\n");
189
+ return ERR;
190
+ }
191
+
192
+ SP->mono = !pdc_font->format->palette;
193
+ #endif
194
+
195
+ if (!SP->mono && !pdc_back)
196
+ {
197
+ const char *bname = getenv("PDC_BACKGROUND");
198
+ pdc_back = SDL_LoadBMP(bname ? bname : "pdcback.bmp");
199
+ }
200
+
201
+ if (!SP->mono && (pdc_back || !pdc_own_window))
202
+ {
203
+ SP->orig_attr = TRUE;
204
+ SP->orig_fore = COLOR_WHITE;
205
+ SP->orig_back = -1;
206
+ }
207
+ else
208
+ SP->orig_attr = FALSE;
209
+
210
+ #ifdef PDC_WIDE
211
+ TTF_SizeText(pdc_ttffont, "W", &pdc_fwidth, &pdc_fheight);
212
+ #else
213
+ pdc_fheight = pdc_font->h / 8;
214
+ pdc_fwidth = pdc_font->w / 32;
215
+
216
+ if (!SP->mono)
217
+ pdc_flastc = pdc_font->format->palette->ncolors - 1;
218
+ #endif
219
+
220
+ if (pdc_own_window && !pdc_icon)
221
+ {
222
+ const char *iname = getenv("PDC_ICON");
223
+ pdc_icon = SDL_LoadBMP(iname ? iname : "pdcicon.bmp");
224
+
225
+ if (!pdc_icon)
226
+ pdc_icon = SDL_LoadBMP_RW(SDL_RWFromMem(deficon,
227
+ sizeof(deficon)), 0);
228
+ }
229
+
230
+ if (pdc_own_window)
231
+ {
232
+ const char *env = getenv("PDC_LINES");
233
+ pdc_sheight = (env ? atoi(env) : default_pdc_sheight) * pdc_fheight;
234
+
235
+ env = getenv("PDC_COLS");
236
+ pdc_swidth = (env ? atoi(env) : default_pdc_swidth) * pdc_fwidth;
237
+
238
+ pdc_window = SDL_CreateWindow((argc ? argv[0] : "PDCurses"), SDL_WINDOWPOS_UNDEFINED,
239
+ SDL_WINDOWPOS_UNDEFINED, pdc_swidth, pdc_sheight,
240
+ SDL_WINDOW_RESIZABLE);
241
+ if (pdc_window == NULL)
242
+ {
243
+ fprintf(stderr, "Could not open SDL window: %s\n", SDL_GetError());
244
+ return ERR;
245
+ }
246
+ SDL_SetWindowIcon(pdc_window, pdc_icon);
247
+
248
+ /* Events must be pumped before calling SDL_GetWindowSurface, or
249
+ initial modifiers (e.g. numlock) will be ignored and out-of-sync. */
250
+ SDL_PumpEvents();
251
+
252
+ pdc_screen = SDL_GetWindowSurface(pdc_window);
253
+ if (pdc_screen == NULL)
254
+ {
255
+ fprintf(stderr, "Could not open SDL window surface: %s\n", SDL_GetError());
256
+ return ERR;
257
+ }
258
+ }
259
+ else
260
+ {
261
+ if (!pdc_screen)
262
+ pdc_screen = SDL_GetWindowSurface(pdc_window);
263
+
264
+ if (!pdc_sheight)
265
+ pdc_sheight = pdc_screen->h - pdc_yoffset;
266
+
267
+ if (!pdc_swidth)
268
+ pdc_swidth = pdc_screen->w - pdc_xoffset;
269
+ }
270
+
271
+ if (!pdc_screen)
272
+ {
273
+ fprintf(stderr, "Couldn't create a surface: %s\n", SDL_GetError());
274
+ return ERR;
275
+ }
276
+
277
+ if (SP->orig_attr)
278
+ PDC_retile();
279
+
280
+ COLORS = 256; /* we have 256 colors in this flavor of PDCurses */
281
+ for (i = 0; i < 8; i++)
282
+ {
283
+ pdc_color[i].r = (i & COLOR_RED) ? 0xc0 : 0;
284
+ pdc_color[i].g = (i & COLOR_GREEN) ? 0xc0 : 0;
285
+ pdc_color[i].b = (i & COLOR_BLUE) ? 0xc0 : 0;
286
+
287
+ pdc_color[i + 8].r = (i & COLOR_RED) ? 0xff : 0x40;
288
+ pdc_color[i + 8].g = (i & COLOR_GREEN) ? 0xff : 0x40;
289
+ pdc_color[i + 8].b = (i & COLOR_BLUE) ? 0xff : 0x40;
290
+ }
291
+
292
+ /* 256-color xterm extended palette: 216 colors in a
293
+ 6x6x6 color cube, plus 24 (not 50) shades of gray */
294
+ i = 16;
295
+ for( r = 0; r < 6; r++)
296
+ for( g = 0; g < 6; g++)
297
+ for( b = 0; b < 6; b++, i++)
298
+ {
299
+ pdc_color[i].r = ( r ? r * 40 + 55 : 0);
300
+ pdc_color[i].g = ( g ? g * 40 + 55 : 0);
301
+ pdc_color[i].b = ( b ? b * 40 + 55 : 0);
302
+ }
303
+ for( i = 232; i < 256; i++)
304
+ pdc_color[i].r = pdc_color[i].g = pdc_color[i].b = (i - 232) * 10 + 8;
305
+ for (i = 0; i < 256; i++)
306
+ pdc_mapped[i] = SDL_MapRGB(pdc_screen->format, pdc_color[i].r,
307
+ pdc_color[i].g, pdc_color[i].b);
308
+
309
+ SDL_StartTextInput();
310
+
311
+ PDC_mouse_set();
312
+
313
+ if (pdc_own_window)
314
+ PDC_set_title(argc ? argv[0] : "PDCurses");
315
+
316
+ SP->lines = PDC_get_rows();
317
+ SP->cols = PDC_get_columns();
318
+
319
+ SP->mouse_wait = PDC_CLICK_PERIOD;
320
+ SP->audible = FALSE;
321
+
322
+ PDC_reset_prog_mode();
323
+
324
+ return OK;
325
+ }
326
+
327
+ /* the core of resize_term() */
328
+
329
+ int PDC_resize_screen(int nlines, int ncols)
330
+ {
331
+ if (!stdscr) /* window hasn't been created yet; we're */
332
+ { /* specifying its size before doing so */
333
+ default_pdc_swidth = ncols;
334
+ default_pdc_sheight = nlines;
335
+ return OK;
336
+ }
337
+
338
+ if (!pdc_own_window)
339
+ return ERR;
340
+
341
+ if (nlines && ncols)
342
+ {
343
+ pdc_sheight = nlines * pdc_fheight;
344
+ pdc_swidth = ncols * pdc_fwidth;
345
+ }
346
+
347
+ SDL_SetWindowSize(pdc_window, pdc_swidth, pdc_sheight);
348
+ pdc_screen = SDL_GetWindowSurface(pdc_window);
349
+
350
+ if (pdc_tileback)
351
+ PDC_retile();
352
+
353
+ SP->resized = FALSE;
354
+ SP->cursrow = SP->curscol = 0;
355
+
356
+ return OK;
357
+ }
358
+
359
+ void PDC_reset_prog_mode(void)
360
+ {
361
+ PDC_LOG(("PDC_reset_prog_mode() - called.\n"));
362
+
363
+ PDC_flushinp();
364
+ }
365
+
366
+ void PDC_reset_shell_mode(void)
367
+ {
368
+ PDC_LOG(("PDC_reset_shell_mode() - called.\n"));
369
+
370
+ PDC_flushinp();
371
+ }
372
+
373
+ void PDC_restore_screen_mode(int i)
374
+ {
375
+ }
376
+
377
+ void PDC_save_screen_mode(int i)
378
+ {
379
+ }
380
+
381
+ void PDC_init_pair(short pair, short fg, short bg)
382
+ {
383
+ atrtab[pair].f = fg;
384
+ atrtab[pair].b = bg;
385
+ }
386
+
387
+ int PDC_pair_content(short pair, short *fg, short *bg)
388
+ {
389
+ *fg = atrtab[pair].f;
390
+ *bg = atrtab[pair].b;
391
+
392
+ return OK;
393
+ }
394
+
395
+ bool PDC_can_change_color(void)
396
+ {
397
+ return TRUE;
398
+ }
399
+
400
+ int PDC_color_content(short color, short *red, short *green, short *blue)
401
+ {
402
+ *red = DIVROUND(pdc_color[color].r * 1000, 255);
403
+ *green = DIVROUND(pdc_color[color].g * 1000, 255);
404
+ *blue = DIVROUND(pdc_color[color].b * 1000, 255);
405
+
406
+ return OK;
407
+ }
408
+
409
+ int PDC_init_color(short color, short red, short green, short blue)
410
+ {
411
+ pdc_color[color].r = DIVROUND(red * 255, 1000);
412
+ pdc_color[color].g = DIVROUND(green * 255, 1000);
413
+ pdc_color[color].b = DIVROUND(blue * 255, 1000);
414
+
415
+ pdc_mapped[color] = SDL_MapRGB(pdc_screen->format, pdc_color[color].r,
416
+ pdc_color[color].g, pdc_color[color].b);
417
+
418
+ wrefresh(curscr);
419
+
420
+ return OK;
421
+ }
422
+
423
+ /* Does nothing in the SDL flavors of PDCurses. That may change, eventually,
424
+ allowing one to limit the range of user-resizable windows. See X11 or Win32a
425
+ versions of this function for details. */
426
+
427
+ void PDC_set_resize_limits( const int new_min_lines, const int new_max_lines,
428
+ const int new_min_cols, const int new_max_cols)
429
+ {
430
+ }
431
+
432
+ /* PDC_set_function_key() does nothing on this platform */
433
+ int PDC_set_function_key( const unsigned function, const int new_key)
434
+ {
435
+ int old_key = -1;
436
+
437
+ if( function < PDC_MAX_FUNCTION_KEYS)
438
+ {
439
+ old_key = PDC_shutdown_key[function];
440
+ PDC_shutdown_key[function] = new_key;
441
+ }
442
+ return( old_key);
443
+ }
@@ -0,0 +1,33 @@
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_Window *pdc_window;
15
+ PDCEX SDL_Surface *pdc_screen, *pdc_font, *pdc_icon, *pdc_back;
16
+ PDCEX int pdc_sheight, pdc_swidth, pdc_yoffset, pdc_xoffset;
17
+
18
+
19
+ extern SDL_Surface *pdc_tileback; /* used to regenerate the background
20
+ of "transparent" cells */
21
+ extern SDL_Color pdc_color[256]; /* colors for font palette */
22
+ extern Uint32 pdc_mapped[256]; /* colors for FillRect(), as
23
+ used in _highlight() */
24
+ extern int pdc_fheight, pdc_fwidth; /* font height and width */
25
+ extern int pdc_flastc; /* font palette's last color
26
+ (treated as the foreground) */
27
+ extern bool pdc_own_window; /* if pdc_window was not set
28
+ before initscr(), PDCurses is
29
+ responsible for (owns) it */
30
+ extern Uint32 pdc_lastupdate; /* time of last update, in ticks */
31
+
32
+ void PDC_update_rects(void);
33
+ void PDC_retile(void);