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,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, ®s)
|
148
|
+
#else
|
149
|
+
# ifdef __WATCOMC__
|
150
|
+
# ifdef __386__
|
151
|
+
# define PDCREGS pdc_dpmi_regs
|
152
|
+
# define PDCINT(vector, regs) PDC_dpmi_int(vector, ®s)
|
153
|
+
# else
|
154
|
+
# define PDCREGS union REGPACK
|
155
|
+
# define PDCINT(vector, regs) intr(vector, ®s)
|
156
|
+
# endif
|
157
|
+
# else
|
158
|
+
# define PDCREGS union REGS
|
159
|
+
# define PDCINT(vector, regs) int86(vector, ®s, ®s)
|
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
|
+
}
|