8282# define USE_MOUSE 1
8383#endif
8484
85- #define NUM2CH NUM2CHR
86- #define CH2FIX CHR2FIX
87-
8885#define OBJ2CHTYPE rb_obj2chtype_inline
8986
9087static inline chtype
9188rb_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
9999static VALUE mCurses ;
@@ -758,7 +758,7 @@ static VALUE
758758curses_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