Skip to content

Commit a340bef

Browse files
committed
Use chtype instead of char
1 parent 96577ce commit a340bef

1 file changed

Lines changed: 21 additions & 19 deletions

File tree

ext/curses/curses.c

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,18 @@
8282
# define USE_MOUSE 1
8383
#endif
8484

85-
#define NUM2CH NUM2CHR
86-
#define CH2FIX CHR2FIX
87-
8885
#define OBJ2CHTYPE rb_obj2chtype_inline
8986

9087
static inline chtype
9188
rb_obj2chtype_inline(VALUE x)
9289
{
93-
if (RB_TYPE_P(x, RUBY_T_STRING) && (RSTRING_LEN(x)>=1))
94-
return RSTRING_PTR(x)[0];
95-
else
96-
return NUM2CHTYPE(x);
90+
if (RB_TYPE_P(x, RUBY_T_STRING)) {
91+
ID id_ord;
92+
93+
CONST_ID(id_ord, "ord");
94+
x = rb_funcall(x, id_ord, 0);
95+
}
96+
return NUM2CHTYPE(x);
9797
}
9898

9999
static VALUE mCurses;
@@ -758,7 +758,7 @@ static VALUE
758758
curses_inch(VALUE obj)
759759
{
760760
curses_stdscr();
761-
return CH2FIX(inch());
761+
return CHTYPE2NUM(inch());
762762
}
763763

764764
/*
@@ -1117,7 +1117,7 @@ curses_bkgdset(VALUE obj, VALUE ch)
11171117
{
11181118
#ifdef HAVE_BKGDSET
11191119
curses_stdscr();
1120-
bkgdset(NUM2CHTYPE(ch));
1120+
bkgdset(OBJ2CHTYPE(ch));
11211121
#endif
11221122
return Qnil;
11231123
}
@@ -1138,7 +1138,7 @@ curses_bkgd(VALUE obj, VALUE ch)
11381138
{
11391139
#ifdef HAVE_BKGD
11401140
curses_stdscr();
1141-
return (bkgd(NUM2CHTYPE(ch)) == OK) ? Qtrue : Qfalse;
1141+
return (bkgd(OBJ2CHTYPE(ch)) == OK) ? Qtrue : Qfalse;
11421142
#else
11431143
return Qfalse;
11441144
#endif
@@ -2194,7 +2194,7 @@ window_begx(VALUE obj)
21942194

21952195
/*
21962196
* Document-method: Curses::Window.box
2197-
* call-seq: box(vert, hor)
2197+
* call-seq: box(vert = nil, hor = nil, corn = nil)
21982198
*
21992199
* set the characters to frame the window in.
22002200
* The vertical +vert+ and horizontal +hor+ character.
@@ -2209,16 +2209,18 @@ window_box(int argc, VALUE *argv, VALUE self)
22092209
struct windata *winp;
22102210
VALUE vert, hor, corn;
22112211

2212-
rb_scan_args(argc, argv, "21", &vert, &hor, &corn);
2212+
rb_scan_args(argc, argv, "03", &vert, &hor, &corn);
22132213

22142214
GetWINDOW(self, winp);
2215-
box(winp->window, NUM2CH(vert), NUM2CH(hor));
2215+
box(winp->window,
2216+
NIL_P(vert) ? 0 : OBJ2CHTYPE(vert),
2217+
NIL_P(hor) ? 0 : OBJ2CHTYPE(hor));
22162218

22172219
if (!NIL_P(corn)) {
22182220
int cur_x, cur_y, x, y;
22192221
chtype c;
22202222

2221-
c = NUM2CH(corn);
2223+
c = OBJ2CHTYPE(corn);
22222224
getyx(winp->window, cur_y, cur_x);
22232225
x = NUM2INT(window_maxx(self)) - 1;
22242226
y = NUM2INT(window_maxy(self)) - 1;
@@ -2285,7 +2287,7 @@ window_inch(VALUE obj)
22852287
struct windata *winp;
22862288

22872289
GetWINDOW(obj, winp);
2288-
return CH2FIX(winch(winp->window));
2290+
return CHTYPE2NUM(winch(winp->window));
22892291
}
22902292

22912293
/*
@@ -2302,7 +2304,7 @@ window_addch(VALUE obj, VALUE ch)
23022304
struct windata *winp;
23032305

23042306
GetWINDOW(obj, winp);
2305-
waddch(winp->window, NUM2CHTYPE(ch));
2307+
waddch(winp->window, OBJ2CHTYPE(ch));
23062308

23072309
return Qnil;
23082310
}
@@ -2320,7 +2322,7 @@ window_insch(VALUE obj, VALUE ch)
23202322
struct windata *winp;
23212323

23222324
GetWINDOW(obj, winp);
2323-
winsch(winp->window, NUM2CH(ch));
2325+
winsch(winp->window, OBJ2CHTYPE(ch));
23242326

23252327
return Qnil;
23262328
}
@@ -2748,7 +2750,7 @@ window_bkgdset(VALUE obj, VALUE ch)
27482750
struct windata *winp;
27492751

27502752
GetWINDOW(obj,winp);
2751-
wbkgdset(winp->window, NUM2CHTYPE(ch));
2753+
wbkgdset(winp->window, OBJ2CHTYPE(ch));
27522754
#endif
27532755
return Qnil;
27542756
}
@@ -2769,7 +2771,7 @@ window_bkgd(VALUE obj, VALUE ch)
27692771
struct windata *winp;
27702772

27712773
GetWINDOW(obj,winp);
2772-
return (wbkgd(winp->window, NUM2CHTYPE(ch)) == OK) ? Qtrue : Qfalse;
2774+
return (wbkgd(winp->window, OBJ2CHTYPE(ch)) == OK) ? Qtrue : Qfalse;
27732775
#else
27742776
return Qfalse;
27752777
#endif

0 commit comments

Comments
 (0)