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.
- checksums.yaml +4 -4
- data/.github/workflows/macos.yml +19 -0
- data/.github/workflows/ubuntu.yml +26 -0
- data/.github/workflows/windows.yml +28 -0
- data/.gitmodules +1 -1
- data/.travis.yml +6 -3
- data/History.md +40 -0
- data/README.md +4 -1
- data/Rakefile +0 -83
- data/curses.gemspec +2 -3
- data/ext/curses/curses.c +1271 -151
- data/ext/curses/extconf.rb +140 -17
- data/lib/curses.rb +5 -12
- data/sample/form.rb +52 -0
- data/sample/menu.rb +1 -1
- data/vendor/PDCurses/.gitignore +47 -0
- data/vendor/PDCurses/.travis.yml +49 -0
- data/vendor/PDCurses/CMakeLists.txt +68 -0
- data/vendor/PDCurses/HISTORY.md +2036 -0
- data/vendor/PDCurses/IMPLEMNT.md +327 -0
- data/vendor/PDCurses/README.md +77 -0
- data/vendor/PDCurses/acs_defs.h +265 -0
- data/vendor/PDCurses/appveyor.yml +218 -0
- data/vendor/PDCurses/cmake/README.md +71 -0
- data/vendor/PDCurses/cmake/build_dependencies.cmake +178 -0
- data/vendor/PDCurses/cmake/build_options.cmake +25 -0
- data/vendor/PDCurses/cmake/dll_version.cmake +26 -0
- data/vendor/PDCurses/cmake/gen_config_header.cmake +43 -0
- data/vendor/PDCurses/cmake/get_version.cmake +17 -0
- data/vendor/PDCurses/cmake/make_uninstall.cmake +19 -0
- data/vendor/PDCurses/cmake/project_common.cmake +121 -0
- data/vendor/PDCurses/cmake/resource.in.cmake +52 -0
- data/vendor/PDCurses/cmake/sdl2_ttf/CMakeLists.txt +83 -0
- data/vendor/PDCurses/cmake/target_arch.cmake +36 -0
- data/vendor/PDCurses/cmake/version.in.cmake +73 -0
- data/vendor/PDCurses/cmake/watcom_open_dos16_toolchain.cmake +96 -0
- data/vendor/PDCurses/cmake/watcom_open_dos32_toolchain.cmake +106 -0
- data/vendor/PDCurses/cmake/watcom_open_os2v2_toolchain.cmake +105 -0
- data/vendor/PDCurses/curses.h +1846 -0
- data/vendor/PDCurses/curspriv.h +134 -0
- data/vendor/PDCurses/demos/README.md +25 -0
- data/vendor/PDCurses/demos/firework.c +144 -0
- data/vendor/PDCurses/demos/newtest.c +581 -0
- data/vendor/PDCurses/demos/ozdemo.c +447 -0
- data/vendor/PDCurses/demos/ptest.c +283 -0
- data/vendor/PDCurses/demos/rain.c +157 -0
- data/vendor/PDCurses/demos/testcurs.c +1607 -0
- data/vendor/PDCurses/demos/tui.c +1048 -0
- data/vendor/PDCurses/demos/tui.h +65 -0
- data/vendor/PDCurses/demos/tuidemo.c +233 -0
- data/vendor/PDCurses/demos/version.c +61 -0
- data/vendor/PDCurses/demos/worm.c +432 -0
- data/vendor/PDCurses/demos/xmas.c +955 -0
- data/vendor/PDCurses/dos/CMakeLists.txt +47 -0
- data/vendor/PDCurses/dos/Makefile.bcc +83 -0
- data/vendor/PDCurses/dos/Makefile.dmc +257 -0
- data/vendor/PDCurses/dos/Makefile.msc +113 -0
- data/vendor/PDCurses/dos/Makefile.wcc +107 -0
- data/vendor/PDCurses/dos/README.md +51 -0
- data/vendor/PDCurses/dos/bccdos.lrf +9 -0
- data/vendor/PDCurses/dos/mscdos.lrf +50 -0
- data/vendor/PDCurses/dos/pdcclip.c +132 -0
- data/vendor/PDCurses/dos/pdcdisp.c +135 -0
- data/vendor/PDCurses/dos/pdcdos.h +194 -0
- data/vendor/PDCurses/dos/pdcgetsc.c +98 -0
- data/vendor/PDCurses/dos/pdckbd.c +513 -0
- data/vendor/PDCurses/dos/pdcscrn.c +785 -0
- data/vendor/PDCurses/dos/pdcsetsc.c +101 -0
- data/vendor/PDCurses/dos/pdcutil.c +212 -0
- data/vendor/PDCurses/libobjs.mif +26 -0
- data/vendor/PDCurses/makedist.mif +20 -0
- data/vendor/PDCurses/man/README.md +21 -0
- data/vendor/PDCurses/man/intro.md +361 -0
- data/vendor/PDCurses/man/manext.c +119 -0
- data/vendor/PDCurses/man/sdl.md +152 -0
- data/vendor/PDCurses/man/sdl2.md +58 -0
- data/vendor/PDCurses/man/x11.md +407 -0
- data/vendor/PDCurses/ncurses/CMakeLists.txt +66 -0
- data/vendor/PDCurses/ncurses/README.md +26 -0
- data/vendor/PDCurses/ncurses/makefile +29 -0
- data/vendor/PDCurses/os2/CMakeLists.txt +41 -0
- data/vendor/PDCurses/os2/Makefile.bcc +90 -0
- data/vendor/PDCurses/os2/Makefile.wcc +43 -0
- data/vendor/PDCurses/os2/README.md +43 -0
- data/vendor/PDCurses/os2/iccos2.lrf +50 -0
- data/vendor/PDCurses/os2/iccos2.mak +256 -0
- data/vendor/PDCurses/os2/pdcclip.c +188 -0
- data/vendor/PDCurses/os2/pdcdisp.c +93 -0
- data/vendor/PDCurses/os2/pdcgetsc.c +89 -0
- data/vendor/PDCurses/os2/pdckbd.c +521 -0
- data/vendor/PDCurses/os2/pdcos2.h +55 -0
- data/vendor/PDCurses/os2/pdcscrn.c +449 -0
- data/vendor/PDCurses/os2/pdcsetsc.c +112 -0
- data/vendor/PDCurses/os2/pdcutil.c +52 -0
- data/vendor/PDCurses/panel.h +56 -0
- data/vendor/PDCurses/pdcurses/README.md +25 -0
- data/vendor/PDCurses/pdcurses/addch.c +693 -0
- data/vendor/PDCurses/pdcurses/addchstr.c +245 -0
- data/vendor/PDCurses/pdcurses/addstr.c +240 -0
- data/vendor/PDCurses/pdcurses/attr.c +359 -0
- data/vendor/PDCurses/pdcurses/beep.c +68 -0
- data/vendor/PDCurses/pdcurses/bkgd.c +223 -0
- data/vendor/PDCurses/pdcurses/border.c +411 -0
- data/vendor/PDCurses/pdcurses/clear.c +159 -0
- data/vendor/PDCurses/pdcurses/color.c +298 -0
- data/vendor/PDCurses/pdcurses/debug.c +109 -0
- data/vendor/PDCurses/pdcurses/delch.c +96 -0
- data/vendor/PDCurses/pdcurses/deleteln.c +211 -0
- data/vendor/PDCurses/pdcurses/deprec.c +27 -0
- data/vendor/PDCurses/pdcurses/getch.c +417 -0
- data/vendor/PDCurses/pdcurses/getstr.c +474 -0
- data/vendor/PDCurses/pdcurses/getyx.c +139 -0
- data/vendor/PDCurses/pdcurses/inch.c +127 -0
- data/vendor/PDCurses/pdcurses/inchstr.c +214 -0
- data/vendor/PDCurses/pdcurses/initscr.c +367 -0
- data/vendor/PDCurses/pdcurses/inopts.c +324 -0
- data/vendor/PDCurses/pdcurses/insch.c +271 -0
- data/vendor/PDCurses/pdcurses/insstr.c +264 -0
- data/vendor/PDCurses/pdcurses/instr.c +246 -0
- data/vendor/PDCurses/pdcurses/kernel.c +259 -0
- data/vendor/PDCurses/pdcurses/keyname.c +157 -0
- data/vendor/PDCurses/pdcurses/mouse.c +438 -0
- data/vendor/PDCurses/pdcurses/move.c +57 -0
- data/vendor/PDCurses/pdcurses/outopts.c +159 -0
- data/vendor/PDCurses/pdcurses/overlay.c +214 -0
- data/vendor/PDCurses/pdcurses/pad.c +260 -0
- data/vendor/PDCurses/pdcurses/panel.c +633 -0
- data/vendor/PDCurses/pdcurses/printw.c +126 -0
- data/vendor/PDCurses/pdcurses/refresh.c +279 -0
- data/vendor/PDCurses/pdcurses/scanw.c +578 -0
- data/vendor/PDCurses/pdcurses/scr_dump.c +213 -0
- data/vendor/PDCurses/pdcurses/scroll.c +101 -0
- data/vendor/PDCurses/pdcurses/slk.c +591 -0
- data/vendor/PDCurses/pdcurses/termattr.c +182 -0
- data/vendor/PDCurses/pdcurses/terminfo.c +217 -0
- data/vendor/PDCurses/pdcurses/touch.c +163 -0
- data/vendor/PDCurses/pdcurses/util.c +312 -0
- data/vendor/PDCurses/pdcurses/window.c +569 -0
- data/vendor/PDCurses/sdl1/Makefile.mng +110 -0
- data/vendor/PDCurses/sdl1/README.md +31 -0
- data/vendor/PDCurses/sdl1/deffont.h +385 -0
- data/vendor/PDCurses/sdl1/deficon.h +23 -0
- data/vendor/PDCurses/sdl1/pdcclip.c +131 -0
- data/vendor/PDCurses/sdl1/pdcdisp.c +373 -0
- data/vendor/PDCurses/sdl1/pdcgetsc.c +30 -0
- data/vendor/PDCurses/sdl1/pdckbd.c +405 -0
- data/vendor/PDCurses/sdl1/pdcscrn.c +414 -0
- data/vendor/PDCurses/sdl1/pdcsdl.h +31 -0
- data/vendor/PDCurses/sdl1/pdcsetsc.c +64 -0
- data/vendor/PDCurses/sdl1/pdcutil.c +40 -0
- data/vendor/PDCurses/sdl1/sdltest.c +79 -0
- data/vendor/PDCurses/sdl2/CMakeLists.txt +76 -0
- data/vendor/PDCurses/sdl2/Makefile.vc +164 -0
- data/vendor/PDCurses/sdl2/README.md +34 -0
- data/vendor/PDCurses/sdl2/deffont.h +385 -0
- data/vendor/PDCurses/sdl2/deficon.h +23 -0
- data/vendor/PDCurses/sdl2/pdcclip.c +93 -0
- data/vendor/PDCurses/sdl2/pdcdisp.c +534 -0
- data/vendor/PDCurses/sdl2/pdcgetsc.c +30 -0
- data/vendor/PDCurses/sdl2/pdckbd.c +480 -0
- data/vendor/PDCurses/sdl2/pdcscrn.c +443 -0
- data/vendor/PDCurses/sdl2/pdcsdl.h +33 -0
- data/vendor/PDCurses/sdl2/pdcsetsc.c +67 -0
- data/vendor/PDCurses/sdl2/pdcutil.c +39 -0
- data/vendor/PDCurses/sdl2/sdltest.c +81 -0
- data/vendor/PDCurses/term.h +48 -0
- data/vendor/PDCurses/version.mif +7 -0
- data/vendor/PDCurses/vt/CMakeLists.txt +28 -0
- data/vendor/PDCurses/vt/Makefile.bcc +111 -0
- data/vendor/PDCurses/vt/Makefile.dmc +258 -0
- data/vendor/PDCurses/vt/Makefile.vc +144 -0
- data/vendor/PDCurses/vt/Makefile.wcc +107 -0
- data/vendor/PDCurses/vt/README.md +64 -0
- data/vendor/PDCurses/vt/pdcclip.c +20 -0
- data/vendor/PDCurses/vt/pdcdisp.c +284 -0
- data/vendor/PDCurses/vt/pdcgetsc.c +27 -0
- data/vendor/PDCurses/vt/pdckbd.c +394 -0
- data/vendor/PDCurses/vt/pdcscrn.c +434 -0
- data/vendor/PDCurses/vt/pdcsetsc.c +45 -0
- data/vendor/PDCurses/vt/pdcutil.c +43 -0
- data/vendor/PDCurses/vt/pdcvt.h +16 -0
- data/vendor/PDCurses/watcom.mif +68 -0
- data/vendor/PDCurses/wincon/CMakeLists.txt +27 -0
- data/vendor/PDCurses/wincon/Makefile.bcc +88 -0
- data/vendor/PDCurses/wincon/Makefile.dmc +256 -0
- data/vendor/PDCurses/wincon/Makefile.lcc +273 -0
- data/vendor/PDCurses/wincon/Makefile.mng +176 -0
- data/vendor/PDCurses/wincon/Makefile.vc +144 -0
- data/vendor/PDCurses/wincon/Makefile.wcc +51 -0
- data/vendor/PDCurses/wincon/README.md +85 -0
- data/vendor/PDCurses/wincon/pdcclip.c +174 -0
- data/vendor/PDCurses/wincon/pdcdisp.c +143 -0
- data/vendor/PDCurses/wincon/pdcgetsc.c +55 -0
- data/vendor/PDCurses/wincon/pdckbd.c +786 -0
- data/vendor/PDCurses/wincon/pdcscrn.c +717 -0
- data/vendor/PDCurses/wincon/pdcsetsc.c +91 -0
- data/vendor/PDCurses/wincon/pdcurses.ico +0 -0
- data/vendor/PDCurses/wincon/pdcurses.rc +28 -0
- data/vendor/PDCurses/wincon/pdcutil.c +41 -0
- data/vendor/PDCurses/wincon/pdcwin.h +31 -0
- data/vendor/PDCurses/wingui/CMakeLists.txt +27 -0
- data/vendor/PDCurses/wingui/Makefile.bcc +85 -0
- data/vendor/PDCurses/wingui/Makefile.dmc +259 -0
- data/vendor/PDCurses/wingui/Makefile.lcc +273 -0
- data/vendor/PDCurses/wingui/Makefile.mng +171 -0
- data/vendor/PDCurses/wingui/Makefile.vc +144 -0
- data/vendor/PDCurses/wingui/Makefile.wcc +51 -0
- data/vendor/PDCurses/wingui/README.md +93 -0
- data/vendor/PDCurses/wingui/pdcclip.c +174 -0
- data/vendor/PDCurses/wingui/pdcdisp.c +718 -0
- data/vendor/PDCurses/wingui/pdcgetsc.c +30 -0
- data/vendor/PDCurses/wingui/pdckbd.c +143 -0
- data/vendor/PDCurses/wingui/pdcscrn.c +2797 -0
- data/vendor/PDCurses/wingui/pdcsetsc.c +89 -0
- data/vendor/PDCurses/wingui/pdcurses.ico +0 -0
- data/vendor/PDCurses/wingui/pdcurses.rc +28 -0
- data/vendor/PDCurses/wingui/pdcutil.c +61 -0
- data/vendor/PDCurses/wingui/pdcwin.h +122 -0
- data/vendor/PDCurses/x11/Makefile.in +754 -0
- data/vendor/PDCurses/x11/PDCurses.spec +82 -0
- data/vendor/PDCurses/x11/README.md +62 -0
- data/vendor/PDCurses/x11/ScrollBox.c +319 -0
- data/vendor/PDCurses/x11/ScrollBox.h +51 -0
- data/vendor/PDCurses/x11/ScrollBoxP.h +70 -0
- data/vendor/PDCurses/x11/aclocal.m4 +994 -0
- data/vendor/PDCurses/x11/big_icon.xbm +46 -0
- data/vendor/PDCurses/x11/compose.h +201 -0
- data/vendor/PDCurses/x11/config.guess +1500 -0
- data/vendor/PDCurses/x11/config.h.in +100 -0
- data/vendor/PDCurses/x11/config.sub +1616 -0
- data/vendor/PDCurses/x11/configure +6700 -0
- data/vendor/PDCurses/x11/configure.ac +295 -0
- data/vendor/PDCurses/x11/debian/changelog +6 -0
- data/vendor/PDCurses/x11/debian/compat +1 -0
- data/vendor/PDCurses/x11/debian/control +11 -0
- data/vendor/PDCurses/x11/debian/copyright +27 -0
- data/vendor/PDCurses/x11/debian/rules +98 -0
- data/vendor/PDCurses/x11/install-sh +253 -0
- data/vendor/PDCurses/x11/little_icon.xbm +14 -0
- data/vendor/PDCurses/x11/ncurses_cfg.h +45 -0
- data/vendor/PDCurses/x11/pdcclip.c +173 -0
- data/vendor/PDCurses/x11/pdcdisp.c +85 -0
- data/vendor/PDCurses/x11/pdcgetsc.c +28 -0
- data/vendor/PDCurses/x11/pdckbd.c +104 -0
- data/vendor/PDCurses/x11/pdcscrn.c +258 -0
- data/vendor/PDCurses/x11/pdcsetsc.c +95 -0
- data/vendor/PDCurses/x11/pdcutil.c +52 -0
- data/vendor/PDCurses/x11/pdcx11.c +316 -0
- data/vendor/PDCurses/x11/pdcx11.h +191 -0
- data/vendor/PDCurses/x11/sb.c +155 -0
- data/vendor/PDCurses/x11/x11.c +3686 -0
- data/vendor/PDCurses/x11/xcurses-config.in +81 -0
- metadata +255 -21
@@ -0,0 +1,23 @@
|
|
1
|
+
/* The PDCurses logo as #include'able BMP (from ../x11/little_icon.xbm) */
|
2
|
+
|
3
|
+
unsigned char deficon[] =
|
4
|
+
{
|
5
|
+
0x42, 0x4d, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,
|
6
|
+
0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
7
|
+
0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
8
|
+
0x00, 0x80, 0x00, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b,
|
9
|
+
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
|
10
|
+
0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff,
|
11
|
+
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xce, 0x6f, 0x9c,
|
12
|
+
0xe7, 0xb5, 0xaf, 0x6b, 0x5b, 0xbd, 0xaf, 0xeb, 0xfb, 0xbd, 0xaf,
|
13
|
+
0x98, 0xe7, 0xbd, 0xaf, 0x7b, 0x5f, 0xb5, 0xa5, 0x6b, 0x5b, 0xcd,
|
14
|
+
0xab, 0x9c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
15
|
+
0xff, 0xcf, 0x03, 0xff, 0xff, 0xce, 0x03, 0xff, 0xff, 0xcc, 0x73,
|
16
|
+
0xff, 0xff, 0xcc, 0xf3, 0xff, 0xff, 0xcc, 0xf3, 0xff, 0xff, 0xcc,
|
17
|
+
0x73, 0xff, 0xff, 0xc6, 0x33, 0xff, 0xff, 0xc3, 0x13, 0xff, 0xff,
|
18
|
+
0xc1, 0x83, 0xff, 0xff, 0xc8, 0xc3, 0xff, 0xff, 0xcc, 0x63, 0xff,
|
19
|
+
0xff, 0xce, 0x33, 0xff, 0xff, 0xcf, 0x33, 0xff, 0xff, 0xcf, 0x33,
|
20
|
+
0xff, 0xff, 0xce, 0x33, 0xff, 0xff, 0xc0, 0x73, 0xff, 0xff, 0xc0,
|
21
|
+
0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
22
|
+
0xff, 0xff, 0xff
|
23
|
+
};
|
@@ -0,0 +1,131 @@
|
|
1
|
+
/* Public Domain Curses */
|
2
|
+
|
3
|
+
#include "pdcsdl.h"
|
4
|
+
|
5
|
+
#include <stdlib.h>
|
6
|
+
|
7
|
+
/*man-start**************************************************************
|
8
|
+
|
9
|
+
clipboard
|
10
|
+
---------
|
11
|
+
|
12
|
+
### Synopsis
|
13
|
+
|
14
|
+
int PDC_getclipboard(char **contents, long *length);
|
15
|
+
int PDC_setclipboard(const char *contents, long length);
|
16
|
+
int PDC_freeclipboard(char *contents);
|
17
|
+
int PDC_clearclipboard(void);
|
18
|
+
|
19
|
+
### Description
|
20
|
+
|
21
|
+
PDC_getclipboard() gets the textual contents of the system's
|
22
|
+
clipboard. This function returns the contents of the clipboard
|
23
|
+
in the contents argument. It is the responsibilitiy of the
|
24
|
+
caller to free the memory returned, via PDC_freeclipboard().
|
25
|
+
The length of the clipboard contents is returned in the length
|
26
|
+
argument.
|
27
|
+
|
28
|
+
PDC_setclipboard copies the supplied text into the system's
|
29
|
+
clipboard, emptying the clipboard prior to the copy.
|
30
|
+
|
31
|
+
PDC_clearclipboard() clears the internal clipboard.
|
32
|
+
|
33
|
+
### Return Values
|
34
|
+
|
35
|
+
indicator of success/failure of call.
|
36
|
+
PDC_CLIP_SUCCESS the call was successful
|
37
|
+
PDC_CLIP_MEMORY_ERROR unable to allocate sufficient memory for
|
38
|
+
the clipboard contents
|
39
|
+
PDC_CLIP_EMPTY the clipboard contains no text
|
40
|
+
PDC_CLIP_ACCESS_ERROR no clipboard support
|
41
|
+
|
42
|
+
### Portability
|
43
|
+
X/Open BSD SYS V
|
44
|
+
PDC_getclipboard - - -
|
45
|
+
PDC_setclipboard - - -
|
46
|
+
PDC_freeclipboard - - -
|
47
|
+
PDC_clearclipboard - - -
|
48
|
+
|
49
|
+
**man-end****************************************************************/
|
50
|
+
|
51
|
+
/* global clipboard contents, should be NULL if none set */
|
52
|
+
|
53
|
+
static char *pdc_SDL_clipboard = NULL;
|
54
|
+
|
55
|
+
int PDC_getclipboard(char **contents, long *length)
|
56
|
+
{
|
57
|
+
int len;
|
58
|
+
|
59
|
+
PDC_LOG(("PDC_getclipboard() - called\n"));
|
60
|
+
|
61
|
+
if (!pdc_SDL_clipboard)
|
62
|
+
return PDC_CLIP_EMPTY;
|
63
|
+
|
64
|
+
len = strlen(pdc_SDL_clipboard);
|
65
|
+
if ((*contents = malloc(len + 1)) == NULL)
|
66
|
+
return PDC_CLIP_MEMORY_ERROR;
|
67
|
+
|
68
|
+
strcpy(*contents, pdc_SDL_clipboard);
|
69
|
+
*length = len;
|
70
|
+
|
71
|
+
return PDC_CLIP_SUCCESS;
|
72
|
+
}
|
73
|
+
|
74
|
+
int PDC_setclipboard(const char *contents, long length)
|
75
|
+
{
|
76
|
+
PDC_LOG(("PDC_setclipboard() - called\n"));
|
77
|
+
|
78
|
+
if (pdc_SDL_clipboard)
|
79
|
+
{
|
80
|
+
free(pdc_SDL_clipboard);
|
81
|
+
pdc_SDL_clipboard = NULL;
|
82
|
+
}
|
83
|
+
|
84
|
+
if (contents)
|
85
|
+
{
|
86
|
+
if ((pdc_SDL_clipboard = malloc(length + 1)) == NULL)
|
87
|
+
return PDC_CLIP_MEMORY_ERROR;
|
88
|
+
|
89
|
+
strcpy(pdc_SDL_clipboard, contents);
|
90
|
+
}
|
91
|
+
|
92
|
+
return PDC_CLIP_SUCCESS;
|
93
|
+
}
|
94
|
+
|
95
|
+
int PDC_freeclipboard(char *contents)
|
96
|
+
{
|
97
|
+
PDC_LOG(("PDC_freeclipboard() - called\n"));
|
98
|
+
|
99
|
+
/* should we also free empty the system clipboard? probably not */
|
100
|
+
|
101
|
+
if (contents)
|
102
|
+
{
|
103
|
+
/* NOTE: We free the memory, but we can not set caller's pointer
|
104
|
+
to NULL, so if caller calls again then will try to access
|
105
|
+
free'd memory. We 1st overwrite memory with a string so if
|
106
|
+
caller tries to use free memory they won't get what they
|
107
|
+
expect & hopefully notice. */
|
108
|
+
|
109
|
+
/* memset(contents, 0xFD, strlen(contents)); */
|
110
|
+
|
111
|
+
if (strlen(contents) >= strlen("PDCURSES"))
|
112
|
+
strcpy(contents, "PDCURSES");
|
113
|
+
|
114
|
+
free(contents);
|
115
|
+
}
|
116
|
+
|
117
|
+
return PDC_CLIP_SUCCESS;
|
118
|
+
}
|
119
|
+
|
120
|
+
int PDC_clearclipboard(void)
|
121
|
+
{
|
122
|
+
PDC_LOG(("PDC_clearclipboard() - called\n"));
|
123
|
+
|
124
|
+
if (pdc_SDL_clipboard)
|
125
|
+
{
|
126
|
+
free(pdc_SDL_clipboard);
|
127
|
+
pdc_SDL_clipboard = NULL;
|
128
|
+
}
|
129
|
+
|
130
|
+
return PDC_CLIP_SUCCESS;
|
131
|
+
}
|
@@ -0,0 +1,373 @@
|
|
1
|
+
/* Public Domain Curses */
|
2
|
+
|
3
|
+
#include "pdcsdl.h"
|
4
|
+
|
5
|
+
#include <stdlib.h>
|
6
|
+
#include <string.h>
|
7
|
+
|
8
|
+
#ifdef CHTYPE_LONG
|
9
|
+
|
10
|
+
#ifdef PDC_WIDE
|
11
|
+
#define USE_UNICODE_ACS_CHARS 1
|
12
|
+
#else
|
13
|
+
#define USE_UNICODE_ACS_CHARS 0
|
14
|
+
#endif
|
15
|
+
|
16
|
+
#include "acs_defs.h"
|
17
|
+
|
18
|
+
#endif
|
19
|
+
|
20
|
+
Uint32 pdc_lastupdate = 0;
|
21
|
+
|
22
|
+
#define MAXRECT 200 /* maximum number of rects to queue up before
|
23
|
+
an update is forced; the number was chosen
|
24
|
+
arbitrarily */
|
25
|
+
|
26
|
+
static SDL_Rect uprect[MAXRECT]; /* table of rects to update */
|
27
|
+
static chtype oldch = (chtype)(-1); /* current attribute */
|
28
|
+
static int rectcount = 0; /* index into uprect */
|
29
|
+
static short foregr = -2, backgr = -2; /* current foreground, background */
|
30
|
+
|
31
|
+
/* do the real updates on a delay */
|
32
|
+
|
33
|
+
void PDC_update_rects(void)
|
34
|
+
{
|
35
|
+
if (rectcount)
|
36
|
+
{
|
37
|
+
/* if the maximum number of rects has been reached, we're
|
38
|
+
probably better off doing a full screen update */
|
39
|
+
|
40
|
+
if (rectcount == MAXRECT)
|
41
|
+
SDL_Flip(pdc_screen);
|
42
|
+
else
|
43
|
+
SDL_UpdateRects(pdc_screen, rectcount, uprect);
|
44
|
+
|
45
|
+
pdc_lastupdate = SDL_GetTicks();
|
46
|
+
rectcount = 0;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
/* set the font colors to match the chtype's attribute */
|
51
|
+
|
52
|
+
static void _set_attr(chtype ch)
|
53
|
+
{
|
54
|
+
ch &= (A_COLOR|A_BOLD|A_BLINK|A_REVERSE);
|
55
|
+
|
56
|
+
if (oldch != ch)
|
57
|
+
{
|
58
|
+
short newfg, newbg;
|
59
|
+
|
60
|
+
if (SP->mono)
|
61
|
+
return;
|
62
|
+
|
63
|
+
PDC_pair_content(PAIR_NUMBER(ch), &newfg, &newbg);
|
64
|
+
|
65
|
+
newfg |= (ch & A_BOLD) ? 8 : 0;
|
66
|
+
newbg |= (ch & A_BLINK) ? 8 : 0;
|
67
|
+
|
68
|
+
if (ch & A_REVERSE)
|
69
|
+
{
|
70
|
+
short tmp = newfg;
|
71
|
+
newfg = newbg;
|
72
|
+
newbg = tmp;
|
73
|
+
}
|
74
|
+
|
75
|
+
if (newfg != foregr)
|
76
|
+
{
|
77
|
+
#ifndef PDC_WIDE
|
78
|
+
SDL_SetPalette(pdc_font, SDL_LOGPAL,
|
79
|
+
pdc_color + newfg, pdc_flastc, 1);
|
80
|
+
#endif
|
81
|
+
foregr = newfg;
|
82
|
+
}
|
83
|
+
|
84
|
+
if (newbg != backgr)
|
85
|
+
{
|
86
|
+
#ifndef PDC_WIDE
|
87
|
+
if (newbg == -1)
|
88
|
+
SDL_SetColorKey(pdc_font, SDL_SRCCOLORKEY, 0);
|
89
|
+
else
|
90
|
+
{
|
91
|
+
if (backgr == -1)
|
92
|
+
SDL_SetColorKey(pdc_font, 0, 0);
|
93
|
+
|
94
|
+
SDL_SetPalette(pdc_font, SDL_LOGPAL,
|
95
|
+
pdc_color + newbg, 0, 1);
|
96
|
+
}
|
97
|
+
#endif
|
98
|
+
backgr = newbg;
|
99
|
+
}
|
100
|
+
|
101
|
+
oldch = ch;
|
102
|
+
}
|
103
|
+
}
|
104
|
+
|
105
|
+
/* draw a cursor at (y, x) */
|
106
|
+
|
107
|
+
void PDC_gotoyx(int row, int col)
|
108
|
+
{
|
109
|
+
SDL_Rect src, dest;
|
110
|
+
chtype ch;
|
111
|
+
int oldrow, oldcol;
|
112
|
+
#ifdef PDC_WIDE
|
113
|
+
Uint16 chstr[2] = {0, 0};
|
114
|
+
#endif
|
115
|
+
|
116
|
+
PDC_LOG(("PDC_gotoyx() - called: row %d col %d from row %d col %d\n",
|
117
|
+
row, col, SP->cursrow, SP->curscol));
|
118
|
+
|
119
|
+
if (SP->mono)
|
120
|
+
return;
|
121
|
+
|
122
|
+
oldrow = SP->cursrow;
|
123
|
+
oldcol = SP->curscol;
|
124
|
+
|
125
|
+
/* clear the old cursor */
|
126
|
+
|
127
|
+
PDC_transform_line(oldrow, oldcol, 1, curscr->_y[oldrow] + oldcol);
|
128
|
+
|
129
|
+
if (!SP->visibility)
|
130
|
+
return;
|
131
|
+
|
132
|
+
/* draw a new cursor by overprinting the existing character in
|
133
|
+
reverse, either the full cell (when visibility == 2) or the
|
134
|
+
lowest quarter of it (when visibility == 1) */
|
135
|
+
|
136
|
+
ch = curscr->_y[row][col] ^ A_REVERSE;
|
137
|
+
|
138
|
+
_set_attr(ch);
|
139
|
+
|
140
|
+
#ifdef CHTYPE_LONG
|
141
|
+
if (ch & A_ALTCHARSET && !(ch & 0xff80))
|
142
|
+
ch = acs_map[ch & 0x7f];
|
143
|
+
#endif
|
144
|
+
src.h = (SP->visibility == 1) ? pdc_fheight >> 2 : pdc_fheight;
|
145
|
+
src.w = pdc_fwidth;
|
146
|
+
|
147
|
+
dest.y = (row + 1) * pdc_fheight - src.h + pdc_yoffset;
|
148
|
+
dest.x = col * pdc_fwidth + pdc_xoffset;
|
149
|
+
|
150
|
+
#ifdef PDC_WIDE
|
151
|
+
chstr[0] = ch & A_CHARTEXT;
|
152
|
+
|
153
|
+
pdc_font = TTF_RenderUNICODE_Solid(pdc_ttffont, chstr, pdc_color[foregr]);
|
154
|
+
if (pdc_font)
|
155
|
+
{
|
156
|
+
dest.h = src.h;
|
157
|
+
dest.w = src.w;
|
158
|
+
src.x = 0;
|
159
|
+
src.y = 0;
|
160
|
+
SDL_SetColorKey(pdc_font, 0, 0);
|
161
|
+
SDL_SetPalette(pdc_font, SDL_LOGPAL, pdc_color + backgr, 0, 1);
|
162
|
+
SDL_BlitSurface(pdc_font, &src, pdc_screen, &dest);
|
163
|
+
SDL_FreeSurface(pdc_font);
|
164
|
+
pdc_font = NULL;
|
165
|
+
}
|
166
|
+
#else
|
167
|
+
|
168
|
+
src.x = (ch & 0xff) % 32 * pdc_fwidth;
|
169
|
+
src.y = (ch & 0xff) / 32 * pdc_fheight + (pdc_fheight - src.h);
|
170
|
+
|
171
|
+
SDL_BlitSurface(pdc_font, &src, pdc_screen, &dest);
|
172
|
+
#endif
|
173
|
+
|
174
|
+
if (oldrow != row || oldcol != col)
|
175
|
+
{
|
176
|
+
if (rectcount == MAXRECT)
|
177
|
+
PDC_update_rects();
|
178
|
+
|
179
|
+
uprect[rectcount++] = dest;
|
180
|
+
}
|
181
|
+
}
|
182
|
+
|
183
|
+
/* handle the A_*LINE attributes */
|
184
|
+
|
185
|
+
static void _highlight(SDL_Rect *src, SDL_Rect *dest, chtype ch)
|
186
|
+
{
|
187
|
+
short col = SP->line_color;
|
188
|
+
#ifdef PDC_WIDE
|
189
|
+
Uint16 chstr[2] = {'_', 0};
|
190
|
+
#endif
|
191
|
+
|
192
|
+
if (SP->mono)
|
193
|
+
return;
|
194
|
+
|
195
|
+
if (ch & (A_UNDERLINE | A_OVERLINE | A_STRIKEOUT))
|
196
|
+
{
|
197
|
+
#ifdef PDC_WIDE
|
198
|
+
if (col == -1)
|
199
|
+
col = foregr;
|
200
|
+
|
201
|
+
pdc_font = TTF_RenderUNICODE_Solid(pdc_ttffont, chstr, pdc_color[col]);
|
202
|
+
if (pdc_font)
|
203
|
+
{
|
204
|
+
src->x = 0;
|
205
|
+
src->y = 0;
|
206
|
+
|
207
|
+
if (backgr != -1)
|
208
|
+
SDL_SetColorKey(pdc_font, SDL_SRCCOLORKEY, 0);
|
209
|
+
|
210
|
+
if( ch & A_UNDERLINE)
|
211
|
+
SDL_BlitSurface(pdc_font, src, pdc_screen, dest);
|
212
|
+
if( ch & A_OVERLINE)
|
213
|
+
{
|
214
|
+
dest->y -= pdc_fheight - 1;
|
215
|
+
SDL_BlitSurface(pdc_font, src, pdc_screen, dest);
|
216
|
+
dest->y += pdc_fheight - 1;
|
217
|
+
}
|
218
|
+
if( ch & A_STRIKEOUT)
|
219
|
+
{
|
220
|
+
dest->y -= pdc_fheight / 2;
|
221
|
+
SDL_BlitSurface(pdc_font, src, pdc_screen, dest);
|
222
|
+
dest->y += pdc_fheight / 2;
|
223
|
+
}
|
224
|
+
SDL_FreeSurface(pdc_font);
|
225
|
+
pdc_font = NULL;
|
226
|
+
}
|
227
|
+
#else
|
228
|
+
if (col != -1)
|
229
|
+
SDL_SetPalette(pdc_font, SDL_LOGPAL,
|
230
|
+
pdc_color + col, pdc_flastc, 1);
|
231
|
+
|
232
|
+
src->x = '_' % 32 * pdc_fwidth;
|
233
|
+
src->y = '_' / 32 * pdc_fheight;
|
234
|
+
|
235
|
+
if (backgr != -1)
|
236
|
+
SDL_SetColorKey(pdc_font, SDL_SRCCOLORKEY, 0);
|
237
|
+
|
238
|
+
if( ch & A_UNDERLINE)
|
239
|
+
SDL_BlitSurface(pdc_font, src, pdc_screen, dest);
|
240
|
+
if( ch & A_OVERLINE)
|
241
|
+
{
|
242
|
+
dest->y -= pdc_fheight - 1;
|
243
|
+
SDL_BlitSurface(pdc_font, src, pdc_screen, dest);
|
244
|
+
dest->y += pdc_fheight - 1;
|
245
|
+
}
|
246
|
+
if( ch & A_STRIKEOUT)
|
247
|
+
{
|
248
|
+
dest->y -= pdc_fheight / 2;
|
249
|
+
SDL_BlitSurface(pdc_font, src, pdc_screen, dest);
|
250
|
+
dest->y += pdc_fheight / 2;
|
251
|
+
}
|
252
|
+
|
253
|
+
if (backgr != -1)
|
254
|
+
SDL_SetColorKey(pdc_font, 0, 0);
|
255
|
+
|
256
|
+
if (col != -1)
|
257
|
+
SDL_SetPalette(pdc_font, SDL_LOGPAL,
|
258
|
+
pdc_color + foregr, pdc_flastc, 1);
|
259
|
+
#endif
|
260
|
+
}
|
261
|
+
|
262
|
+
if (ch & (A_LEFTLINE|A_RIGHTLINE))
|
263
|
+
{
|
264
|
+
if (col == -1)
|
265
|
+
col = foregr;
|
266
|
+
|
267
|
+
dest->w = 1;
|
268
|
+
|
269
|
+
if (ch & A_LEFTLINE)
|
270
|
+
SDL_FillRect(pdc_screen, dest, pdc_mapped[col]);
|
271
|
+
|
272
|
+
if (ch & A_RIGHTLINE)
|
273
|
+
{
|
274
|
+
dest->x += pdc_fwidth - 1;
|
275
|
+
SDL_FillRect(pdc_screen, dest, pdc_mapped[col]);
|
276
|
+
dest->x -= pdc_fwidth - 1;
|
277
|
+
}
|
278
|
+
|
279
|
+
dest->w = pdc_fwidth;
|
280
|
+
}
|
281
|
+
}
|
282
|
+
|
283
|
+
/* update the given physical line to look like the corresponding line in
|
284
|
+
curscr */
|
285
|
+
|
286
|
+
void PDC_transform_line(int lineno, int x, int len, const chtype *srcp)
|
287
|
+
{
|
288
|
+
SDL_Rect src, dest, lastrect;
|
289
|
+
int j;
|
290
|
+
#ifdef PDC_WIDE
|
291
|
+
Uint16 chstr[2] = {0, 0};
|
292
|
+
#endif
|
293
|
+
|
294
|
+
PDC_LOG(("PDC_transform_line() - called: lineno=%d\n", lineno));
|
295
|
+
|
296
|
+
if (rectcount == MAXRECT)
|
297
|
+
PDC_update_rects();
|
298
|
+
|
299
|
+
src.h = pdc_fheight;
|
300
|
+
src.w = pdc_fwidth;
|
301
|
+
|
302
|
+
dest.y = pdc_fheight * lineno + pdc_yoffset;
|
303
|
+
dest.x = pdc_fwidth * x + pdc_xoffset;
|
304
|
+
dest.h = pdc_fheight;
|
305
|
+
dest.w = pdc_fwidth * len;
|
306
|
+
|
307
|
+
/* if the previous rect was just above this one, with the same width
|
308
|
+
and horizontal position, then merge the new one with it instead
|
309
|
+
of adding a new entry */
|
310
|
+
|
311
|
+
if (rectcount)
|
312
|
+
lastrect = uprect[rectcount - 1];
|
313
|
+
|
314
|
+
if (rectcount && lastrect.x == dest.x && lastrect.w == dest.w)
|
315
|
+
{
|
316
|
+
if (lastrect.y + lastrect.h == dest.y)
|
317
|
+
uprect[rectcount - 1].h = lastrect.h + pdc_fheight;
|
318
|
+
else
|
319
|
+
if (lastrect.y != dest.y)
|
320
|
+
uprect[rectcount++] = dest;
|
321
|
+
}
|
322
|
+
else
|
323
|
+
uprect[rectcount++] = dest;
|
324
|
+
|
325
|
+
dest.w = pdc_fwidth;
|
326
|
+
|
327
|
+
#ifdef PDC_WIDE
|
328
|
+
src.x = 0;
|
329
|
+
src.y = 0;
|
330
|
+
#endif
|
331
|
+
|
332
|
+
for (j = 0; j < len; j++)
|
333
|
+
{
|
334
|
+
chtype ch = srcp[j];
|
335
|
+
|
336
|
+
_set_attr(ch);
|
337
|
+
#ifdef CHTYPE_LONG
|
338
|
+
if (ch & A_ALTCHARSET && !(ch & 0xff80))
|
339
|
+
ch = (ch & (A_ATTRIBUTES ^ A_ALTCHARSET)) | acs_map[ch & 0x7f];
|
340
|
+
#endif
|
341
|
+
if (backgr == -1)
|
342
|
+
SDL_LowerBlit(pdc_tileback, &dest, pdc_screen, &dest);
|
343
|
+
|
344
|
+
#ifdef PDC_WIDE
|
345
|
+
chstr[0] = ch & A_CHARTEXT;
|
346
|
+
pdc_font = TTF_RenderUNICODE_Solid(pdc_ttffont, chstr,
|
347
|
+
pdc_color[foregr]);
|
348
|
+
|
349
|
+
if (pdc_font)
|
350
|
+
{
|
351
|
+
if (backgr != -1)
|
352
|
+
{
|
353
|
+
SDL_SetColorKey(pdc_font, 0, 0);
|
354
|
+
SDL_SetPalette(pdc_font, SDL_LOGPAL,
|
355
|
+
pdc_color + backgr, 0, 1);
|
356
|
+
}
|
357
|
+
SDL_BlitSurface(pdc_font, &src, pdc_screen, &dest);
|
358
|
+
SDL_FreeSurface(pdc_font);
|
359
|
+
pdc_font = NULL;
|
360
|
+
}
|
361
|
+
#else
|
362
|
+
src.x = (ch & 0xff) % 32 * pdc_fwidth;
|
363
|
+
src.y = (ch & 0xff) / 32 * pdc_fheight;
|
364
|
+
|
365
|
+
SDL_LowerBlit(pdc_font, &src, pdc_screen, &dest);
|
366
|
+
#endif
|
367
|
+
|
368
|
+
if (ch & (A_UNDERLINE|A_LEFTLINE|A_RIGHTLINE|A_OVERLINE|A_STRIKEOUT))
|
369
|
+
_highlight(&src, &dest, ch);
|
370
|
+
|
371
|
+
dest.x += pdc_fwidth;
|
372
|
+
}
|
373
|
+
}
|