23 #if defined(HAVE_NCURSES_H)
25 #elif defined(HAVE_NCURSES_CURSES_H)
26 # include <ncurses/curses.h>
27 #elif defined(HAVE_CURSES_COLR_CURSES_H)
28 # ifdef HAVE_STDARG_PROTOTYPES
33 # include <curses_colr/curses.h>
36 # if defined(__bsdi__) || defined(__NetBSD__) || defined(__APPLE__)
52 #ifdef HAVE_INIT_COLOR
57 #ifdef NCURSES_MOUSE_VERSION
61 #define NUM2CH NUM2CHR
62 #define CH2FIX CHR2FIX
69 static VALUE cMouseEvent;
88 #define GetWINDOW(obj, winp) do {\
89 if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4)\
90 rb_raise(rb_eSecurityError, "Insecure: operation on untainted window");\
91 TypedData_Get_Struct((obj), struct windata, &windata_type, (winp));\
92 if ((winp)->window == 0) no_window();\
108 size_t size =
sizeof(*winp);
125 if (window ==
NULL) {
169 #define curses_stdscr curses_init_screen
234 #define curses_closed rb_f_notimplement
523 #define curses_ungetch rb_f_notimplement
641 int *
ip = (
int *)arg;
671 #define GETSTR_BUF_SIZE 1024
676 char *rtn = (
char *)arg;
677 #if defined(HAVE_GETNSTR)
725 #if defined(HAVE_DELETELN) || defined(deleteln)
741 #if defined(HAVE_INSERTLN) || defined(insertln)
859 #ifdef HAVE_SETSCRREG
962 #if defined(HAVE_USE_DEFAULT_COLORS)
972 use_default_colors();
976 #define curses_use_default_colors rb_f_notimplement
979 #if defined(HAVE_TABSIZE)
993 #define curses_tabsize_set rb_f_notimplement
996 #if defined(HAVE_TABSIZE)
1006 #define curses_tabsize_get rb_f_notimplement
1009 #if defined(HAVE_ESCDELAY)
1022 #define curses_escdelay_set rb_f_notimplement
1025 #if defined(HAVE_ESCDELAY)
1036 #define curses_escdelay_get rb_f_notimplement
1057 #if defined(HAVE_RESIZETERM)
1135 curses_has_colors(
VALUE obj)
1147 curses_can_change_color(
VALUE obj)
1153 #if defined(HAVE_COLORS)
1160 curses_colors(
VALUE obj)
1165 #define curses_colors rb_f_notimplement
1180 color_content(
NUM2INT(color),&r,&g,&b);
1185 #if defined(HAVE_COLOR_PAIRS)
1192 curses_color_pairs(
VALUE obj)
1197 #define curses_color_pairs rb_f_notimplement
1213 pair_content(
NUM2INT(pair),&f,&b);
1258 #define GetMOUSE(obj, data) do {\
1259 if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4)\
1260 rb_raise(rb_eSecurityError, "Insecure: operation on untainted mouse");\
1261 TypedData_Get_Struct((obj), struct mousedata, &mousedata_type, (data));\
1262 if ((data)->mevent == 0) no_mevent();\
1266 curses_mousedata_free(
void *
p)
1268 struct mousedata *mdata =
p;
1270 xfree(mdata->mevent);
1274 curses_mousedata_memsize(
const void *p)
1276 const struct mousedata *mdata =
p;
1277 size_t size =
sizeof(*mdata);
1278 if (!mdata)
return 0;
1279 if (mdata->mevent) size +=
sizeof(mdata->mevent);
1285 {0, curses_mousedata_free, curses_mousedata_memsize,}
1298 curses_getmouse(
VALUE obj)
1300 struct mousedata *mdata;
1305 &mousedata_type,mdata);
1306 mdata->mevent = (MEVENT*)
xmalloc(
sizeof(MEVENT));
1307 return (getmouse(mdata->mevent) == OK) ? val :
Qnil;
1321 struct mousedata *mdata;
1324 GetMOUSE(mevent,mdata);
1325 return (ungetmouse(mdata->mevent) == OK) ?
Qtrue :
Qfalse;
1345 curses_mouseinterval(
VALUE obj,
VALUE interval)
1364 #define DEFINE_MOUSE_GET_MEMBER(func_name,mem) \
1365 static VALUE func_name (VALUE mouse) \
1367 struct mousedata *mdata; \
1368 GetMOUSE(mouse, mdata); \
1369 return (UINT2NUM(mdata->mevent -> mem)); \
1377 DEFINE_MOUSE_GET_MEMBER(curs_mouse_id,
id)
1383 DEFINE_MOUSE_GET_MEMBER(curs_mouse_x, x)
1389 DEFINE_MOUSE_GET_MEMBER(curs_mouse_y, y)
1395 DEFINE_MOUSE_GET_MEMBER(curs_mouse_z, z)
1402 DEFINE_MOUSE_GET_MEMBER(curs_mouse_bstate, bstate)
1403 #undef define_curs_mouse_member
1425 #define curses_timeout rb_f_notimplement
1428 #ifdef HAVE_DEF_PROG_MODE
1444 #define curses_def_prog_mode rb_f_notimplement
1447 #ifdef HAVE_RESET_PROG_MODE
1463 #define curses_reset_prog_mode rb_f_notimplement
1526 window = subwin(winp->
window, h, w, t, l);
1612 #ifdef HAVE_DOUPDATE
1613 wnoutrefresh(winp->
window);
1669 getyx(winp->
window, y, x);
1685 getyx(winp->
window, y, x);
1700 #if defined(getmaxy)
1702 #elif defined(getmaxyx)
1705 getmaxyx(winp->
window, y, x);
1724 #if defined(getmaxx)
1726 #elif defined(getmaxyx)
1729 getmaxyx(winp->
window, y, x);
1750 getbegyx(winp->
window, y, x);
1770 getbegyx(winp->
window, y, x);
1792 VALUE vert, hor, corn;
1800 int cur_x, cur_y, x, y;
1804 getyx(winp->
window, cur_y, cur_x);
1807 wmove(winp->
window, 0, 0);
1809 wmove(winp->
window, y, 0);
1811 wmove(winp->
window, y, x);
1813 wmove(winp->
window, 0, x);
1815 wmove(winp->
window, cur_y, cur_x);
1957 arg->
c = wgetch(arg->
win);
1998 #if defined(HAVE_WGETNSTR)
2001 wgetstr(arg->
win, arg->
rtn);
2049 #if defined(HAVE_WDELETELN) || defined(wdeleteln)
2067 #if defined(HAVE_WINSERTLN) || defined(winsertln)
2144 #ifdef HAVE_WSETSCRREG
2157 #if defined(USE_COLOR) && defined(HAVE_WCOLOR_SET)
2229 #ifdef HAVE_WATTROFF
2299 #ifdef HAVE_WATTRSET
2321 #ifdef HAVE_WBKGDSET
2360 #ifdef HAVE_WGETBKGD
2381 #if defined(HAVE_WRESIZE)
2427 #if defined(__NetBSD__) && !defined(NCURSES_VERSION)
2437 #define window_keypad rb_f_notimplement
2460 #if defined(__NetBSD__) && !defined(NCURSES_VERSION)
2468 #define window_nodelay rb_f_notimplement
2471 #ifdef HAVE_WTIMEOUT
2492 #define window_timeout rb_f_notimplement
2526 #define pad_subpad window_subwin
2550 subpad = subwin(padp->
window, h, w, x, y);
2574 int pmr, pmc, smr, smc, sxr, sxc;
2584 prefresh(padp->
window, pmr, pmc, smr, smc, sxr, sxc);
2606 int pmr, pmc, smr, smc, sxr, sxc;
2616 #ifdef HAVE_DOUPDATE
2617 pnoutrefresh(padp->
window, pmr, pmc, smr, smc, sxr, sxc);
2619 prefresh(padp->
window, pmr, pmc, smr, smc, sxr, sxc);
2756 curses_can_change_color, 0);
2777 #if defined(HAVE_FUNC_CURSES_VERSION)
2780 #elif defined(HAVE_VAR_CURSES_VERSION)
2784 version =
rb_sprintf(
"curses (%s)", curses_version);
2843 #if defined(USE_COLOR) && defined(HAVE_WCOLOR_SET)
2903 #define rb_curses_define_const(c) rb_define_const(mCurses,#c,UINT2NUM(c))
3133 #ifdef BUTTON1_PRESSED
3143 #ifdef BUTTON1_RELEASED
3153 #ifdef BUTTON1_CLICKED
3163 #ifdef BUTTON1_DOUBLE_CLICKED
3173 #ifdef BUTTON1_TRIPLE_CLICKED
3183 #ifdef BUTTON2_PRESSED
3193 #ifdef BUTTON2_RELEASED
3203 #ifdef BUTTON2_CLICKED
3213 #ifdef BUTTON2_DOUBLE_CLICKED
3223 #ifdef BUTTON2_TRIPLE_CLICKED
3233 #ifdef BUTTON3_PRESSED
3243 #ifdef BUTTON3_RELEASED
3253 #ifdef BUTTON3_CLICKED
3263 #ifdef BUTTON3_DOUBLE_CLICKED
3273 #ifdef BUTTON3_TRIPLE_CLICKED
3283 #ifdef BUTTON4_PRESSED
3293 #ifdef BUTTON4_RELEASED
3303 #ifdef BUTTON4_CLICKED
3313 #ifdef BUTTON4_DOUBLE_CLICKED
3323 #ifdef BUTTON4_TRIPLE_CLICKED
3363 #ifdef ALL_MOUSE_EVENTS
3373 #ifdef REPORT_MOUSE_POSITION
3385 #if defined(KEY_MOUSE) && defined(USE_MOUSE)
3465 #ifdef KEY_BACKSPACE
3480 for (i=0; i<64; i++) {
3481 sprintf(c,
"KEY_F%d", i);
3483 sprintf(c,
"F%d", i);
3928 #ifdef KEY_REFERENCE
4188 #ifdef KEY_SPREVIOUS
4320 char name[] =
"KEY_CTRL_x";
4321 for (c =
'A'; c <=
'Z'; c++) {
4322 name[
sizeof(
name) - 2] = c;
4326 #undef rb_curses_define_const
static VALUE curses_nonl(VALUE obj)
static VALUE curses_getstr(VALUE obj)
static VALUE window_attrset(VALUE obj, VALUE attrs)
#define GetWINDOW(obj, winp)
static VALUE curses_addch(VALUE obj, VALUE ch)
static VALUE window_clrtoeol(VALUE obj)
#define curses_def_prog_mode
static VALUE window_inch(VALUE obj)
static VALUE curses_attroff(VALUE obj, VALUE attrs)
static VALUE curses_addstr(VALUE obj, VALUE str)
static VALUE window_noutrefresh(VALUE obj)
static VALUE curses_echo(VALUE obj)
static VALUE window_standout(VALUE obj)
static VALUE window_maxy(VALUE obj)
static VALUE curses_setpos(VALUE obj, VALUE y, VALUE x)
static VALUE window_setscrreg(VALUE obj, VALUE top, VALUE bottom)
static VALUE window_scrollok(VALUE obj, VALUE bf)
#define curses_escdelay_set
VALUE rb_str_new_cstr(const char *)
static VALUE window_clear(VALUE obj)
static VALUE curses_raw(VALUE obj)
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
static VALUE window_scrl(VALUE obj, VALUE n)
static VALUE window_curx(VALUE obj)
static VALUE window_cury(VALUE obj)
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
void rb_raise(VALUE exc, const char *fmt,...)
VALUE rb_obj_class(VALUE)
static VALUE window_begx(VALUE obj)
VALUE rb_ary_new3(long n,...)
static VALUE curses_refresh(VALUE obj)
static VALUE window_getch(VALUE obj)
VALUE rb_locale_str_new(const char *, long)
#define curses_escdelay_get
static VALUE curses_doupdate(VALUE obj)
static void * getstr_func(void *arg)
static VALUE curses_cbreak(VALUE obj)
void rb_undef_method(VALUE klass, const char *name)
static VALUE window_move(VALUE obj, VALUE y, VALUE x)
static VALUE window_setpos(VALUE obj, VALUE y, VALUE x)
static VALUE curses_cols(void)
static VALUE window_maxx(VALUE obj)
#define curses_tabsize_get
static void curses_finalize(VALUE dummy)
static VALUE prep_window(VALUE class, WINDOW *window)
static void no_window(void)
static VALUE curses_keyname(VALUE obj, VALUE c)
static VALUE curses_deleteln(VALUE obj)
static VALUE curses_setscrreg(VALUE obj, VALUE top, VALUE bottom)
static VALUE curses_lines(void)
static VALUE window_insertln(VALUE obj)
static VALUE window_initialize(VALUE obj, VALUE h, VALUE w, VALUE top, VALUE left)
static VALUE curses_noecho(VALUE obj)
#define TypedData_Get_Struct(obj, type, data_type, sval)
int rb_block_given_p(void)
static const rb_data_type_t windata_type
static VALUE curses_delch(VALUE obj)
static VALUE window_scroll(VALUE obj)
static VALUE window_addstr(VALUE obj, VALUE str)
static VALUE window_delch(VALUE obj)
static VALUE window_bkgdset(VALUE obj, VALUE ch)
static VALUE curses_scrl(VALUE obj, VALUE n)
static VALUE curses_flash(VALUE obj)
static VALUE window_box(int argc, VALUE *argv, VALUE self)
static void * wgetstr_func(void *_arg)
VALUE rb_locale_str_new_cstr(const char *)
static void Tcl_Interp * ip
static VALUE window_idlok(VALUE obj, VALUE bf)
static VALUE window_attroff(VALUE obj, VALUE attrs)
#define StringValueCStr(v)
void rb_define_const(VALUE, const char *, VALUE)
static VALUE curses_inch(VALUE obj)
void rb_gc_unregister_address(VALUE *)
static VALUE window_refresh(VALUE obj)
static VALUE window_bkgd(VALUE obj, VALUE ch)
static VALUE curses_nl(VALUE obj)
void * rb_thread_call_without_gvl(void *(*func)(void *), void *data1, rb_unblock_function_t *ubf, void *data2)
void rb_define_module_function(VALUE module, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a module function for module.
static VALUE curses_bkgdset(VALUE obj, VALUE ch)
VALUE rb_sprintf(const char *format,...)
static void yytype_int16 * bottom
char rtn[GETSTR_BUF_SIZE]
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
static void window_free(void *p)
static int curses_char(VALUE c)
static VALUE window_resize(VALUE obj, VALUE lin, VALUE col)
static VALUE curses_attron(VALUE obj, VALUE attrs)
static VALUE window_standend(VALUE obj)
static VALUE curses_init_screen(void)
static size_t window_memsize(const void *p)
static VALUE curses_nocbreak(VALUE obj)
void rb_set_end_proc(void(*func)(VALUE), VALUE data)
VALUE rb_define_module_under(VALUE outer, const char *name)
VALUE rb_str_export_locale(VALUE)
static VALUE curses_attrset(VALUE obj, VALUE attrs)
void rb_gc_register_address(VALUE *)
static VALUE curses_standend(VALUE obj)
static VALUE window_getbkgd(VALUE obj)
static VALUE window_s_allocate(VALUE class)
static VALUE curses_clear(VALUE obj)
static VALUE curses_standout(VALUE obj)
static VALUE window_subwin(VALUE obj, VALUE height, VALUE width, VALUE top, VALUE left)
static VALUE curses_curs_set(VALUE obj, VALUE visibility)
static VALUE curses_close_screen(void)
#define TypedData_Make_Struct(klass, type, data_type, sval)
static VALUE curses_beep(VALUE obj)
RUBY_EXTERN VALUE rb_cObject
#define curses_reset_prog_mode
static VALUE curses_bkgd(VALUE obj, VALUE ch)
static VALUE curses_insch(VALUE obj, VALUE ch)
static void * getch_func(void *arg)
VALUE rb_obj_alloc(VALUE)
static VALUE window_begy(VALUE obj)
static void version(void)
static VALUE curses_insertln(VALUE obj)
static VALUE window_deleteln(VALUE obj)
#define rb_curses_define_const(c)
VALUE rb_define_module(const char *name)
static VALUE window_close(VALUE obj)
static VALUE window_insch(VALUE obj, VALUE ch)
static VALUE window_getstr(VALUE obj)
static VALUE curses_clrtoeol(void)
static VALUE window_attron(VALUE obj, VALUE attrs)
RUBY_EXTERN VALUE rb_cData
static VALUE window_addch(VALUE obj, VALUE ch)
static void * wgetch_func(void *_arg)
#define curses_use_default_colors
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
#define curses_tabsize_set
static VALUE curses_noraw(VALUE obj)
static VALUE curses_resizeterm(VALUE obj, VALUE lin, VALUE col)
static VALUE curses_getch(VALUE obj)
static VALUE window_addstr2(VALUE obj, VALUE str)