diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/Win32API/MANIFEST | 7 | ||||
-rw-r--r-- | ext/Win32API/Win32API.c | 223 | ||||
-rw-r--r-- | ext/Win32API/extconf.rb | 7 | ||||
-rw-r--r-- | ext/Win32API/getch.rb | 5 | ||||
-rw-r--r-- | ext/Win32API/point.rb | 18 | ||||
-rw-r--r-- | ext/curses/curses.c | 18 | ||||
-rw-r--r-- | ext/dbm/dbm.c | 88 | ||||
-rw-r--r-- | ext/etc/etc.c | 84 | ||||
-rw-r--r-- | ext/gtk/gtk.c | 745 | ||||
-rw-r--r-- | ext/kconv/kconv.c | 8 | ||||
-rw-r--r-- | ext/md5/md5init.c | 6 | ||||
-rw-r--r-- | ext/socket/extconf.rb | 1 | ||||
-rw-r--r-- | ext/socket/socket.c | 624 | ||||
-rw-r--r-- | ext/tcltklib/tcltklib.c | 40 | ||||
-rw-r--r-- | ext/tkutil/tkutil.c | 16 |
15 files changed, 1007 insertions, 883 deletions
diff --git a/ext/Win32API/MANIFEST b/ext/Win32API/MANIFEST deleted file mode 100644 index 7cc9ac445e..0000000000 --- a/ext/Win32API/MANIFEST +++ /dev/null @@ -1,7 +0,0 @@ -MANIFEST -depend -MANIFEST -Win32API.c -extconf.rb -getch.rb -point.rb diff --git a/ext/Win32API/Win32API.c b/ext/Win32API/Win32API.c deleted file mode 100644 index f4cb5c726f..0000000000 --- a/ext/Win32API/Win32API.c +++ /dev/null @@ -1,223 +0,0 @@ -/* - Win32API - Ruby Win32 API Import Facility -*/ - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#include <stdio.h> - -#define _T_VOID 0 -#define _T_NUMBER 1 -#define _T_POINTER 2 -#define _T_INTEGER 3 - -typedef char *ApiPointer(void); -typedef long ApiNumber(void); -typedef void ApiVoid(void); -typedef int ApiInteger(void); - -#include "ruby.h" - -typedef struct { - HANDLE dll; - HANDLE proc; - VALUE dllname; - VALUE import; - VALUE export; -} Win32API; - -static void -Win32API_FreeLibrary(hdll) - HINSTANCE hdll; -{ - FreeLibrary(hdll); -} - -static VALUE -Win32API_initialize(self, dllname, proc, import, export) - VALUE self; - VALUE dllname; - VALUE proc; - VALUE import; - VALUE export; -{ - HANDLE hproc; - HINSTANCE hdll; - VALUE str; - VALUE a_import; - VALUE *ptr; - int i; - int len; - int ex; - - hdll = GetModuleHandle(RSTRING(dllname)->ptr); - if (!hdll) { - hdll = LoadLibrary(RSTRING(dllname)->ptr); - if (!hdll) - Fail("LoadLibrary: %s\n", RSTRING(dllname)->ptr); - Data_Wrap_Struct(self, 0, Win32API_FreeLibrary, hdll); - } - hproc = GetProcAddress(hdll, RSTRING(proc)->ptr); - if (!hproc) { - str = str_new3(proc); - str = str_cat(str, "A", 1); - hproc = GetProcAddress(hdll, RSTRING(str)->ptr); - if (!hproc) - Fail("GetProcAddress: %s or %s\n", - RSTRING(proc)->ptr, RSTRING(str)->ptr); - } - rb_iv_set(self, "__dll__", INT2NUM((int)hdll)); - rb_iv_set(self, "__dllname__", dllname); - rb_iv_set(self, "__proc__", INT2NUM((int)hproc)); - - a_import = ary_new(); - ptr = RARRAY(import)->ptr; - for (i = 0, len = RARRAY(import)->len; i < len; i++) { - int c = *(char *)RSTRING(ptr[i])->ptr; - switch (c) { - case 'N': case 'n': case 'L': case 'l': - ary_push(a_import, INT2FIX(_T_NUMBER)); - break; - case 'P': case 'p': - ary_push(a_import, INT2FIX(_T_POINTER)); - break; - case 'I': case 'i': - ary_push(a_import, INT2FIX(_T_INTEGER)); - break; - } - } - rb_iv_set(self, "__import__", a_import); - - switch (*RSTRING(export)->ptr) { - case 'V': case 'v': - ex = _T_VOID; - break; - case 'N': case 'n': case 'L': case 'l': - ex = _T_NUMBER; - break; - case 'P': case 'p': - ex = _T_POINTER; - break; - case 'I': case 'i': - ex = _T_INTEGER; - break; - } - rb_iv_set(self, "__export__", INT2FIX(ex)); - - return Qnil; -} - -static VALUE -Win32API_Call(argc, argv, obj) - VALUE argc; - VALUE argv; - VALUE obj; -{ - VALUE args; - - FARPROC ApiFunction; - - ApiPointer *ApiFunctionPointer; - ApiNumber *ApiFunctionNumber; - ApiVoid *ApiFunctionVoid; - ApiInteger *ApiFunctionInteger; - - long lParam; - char *pParam; - - VALUE Return; - - VALUE obj_proc; - VALUE obj_import; - VALUE obj_export; - VALUE import_type; - int nimport, timport, texport, i; - int items; - - items = rb_scan_args(argc, argv, "0*", &args); - - obj_proc = rb_iv_get(obj, "__proc__"); - - ApiFunction = (FARPROC)NUM2INT(obj_proc); - - obj_import = rb_iv_get(obj, "__import__"); - obj_export = rb_iv_get(obj, "__export__"); - nimport = RARRAY(obj_import)->len; - texport = FIX2INT(obj_export); - - if (items != nimport) - Fail("Wrong number of parameters: expected %d, got %d.\n", - nimport, items); - - if (0 < nimport) { - for (i = nimport - 1; 0 <= i; i--) { - VALUE str; - import_type = ary_entry(obj_import, i); - timport = FIX2INT(import_type); - switch (timport) { - case _T_NUMBER: - case _T_INTEGER: - lParam = NUM2INT(ary_entry(args, i)); -#if defined(_MSC_VER) || defined(__LCC__) - _asm { - mov eax, lParam - push eax - } -#elif defined(__CYGWIN32__) || defined(__MINGW32__) - asm volatile ("pushl %0" :: "g" (lParam)); -#else -#error -#endif - break; - case _T_POINTER: - str = ary_entry(args, i); - Check_Type(str, T_STRING); - str_modify(str); - pParam = RSTRING(str)->ptr; -#if defined(_MSC_VER) || defined(__LCC__) - _asm { - mov eax, dword ptr pParam - push eax - } -#elif defined(__CYGWIN32__) || defined(__MINGW32__) - asm volatile ("pushl %0" :: "g" (pParam)); -#else -#error -#endif - break; - } - } - - } - - switch (texport) { - case _T_NUMBER: - ApiFunctionNumber = (ApiNumber *) ApiFunction; - Return = INT2NUM(ApiFunctionNumber()); - break; - case _T_POINTER: - ApiFunctionPointer = (ApiPointer *) ApiFunction; - Return = str_new2((char *)ApiFunctionPointer()); - break; - case _T_INTEGER: - ApiFunctionInteger = (ApiInteger *) ApiFunction; - Return = INT2NUM(ApiFunctionInteger()); - break; - case _T_VOID: - default: - ApiFunctionVoid = (ApiVoid *) ApiFunction; - ApiFunctionVoid(); - Return = INT2NUM(0); - break; - } - return Return; -} - -void -Init_Win32API() -{ - VALUE cWin32API = rb_define_class("Win32API", cObject); - rb_define_method(cWin32API, "initialize", Win32API_initialize, 4); - rb_define_method(cWin32API, "call", Win32API_Call, -1); - rb_define_alias(cWin32API, "Call", "call"); -} diff --git a/ext/Win32API/extconf.rb b/ext/Win32API/extconf.rb deleted file mode 100644 index a03f358593..0000000000 --- a/ext/Win32API/extconf.rb +++ /dev/null @@ -1,7 +0,0 @@ -case PLATFORM -when /cygwin32/,/mingw32/ - $CFLAGS = "-fno-defer-pop" - create_makefile("Win32API") -when /win32/ - create_makefile("Win32API") -end diff --git a/ext/Win32API/getch.rb b/ext/Win32API/getch.rb deleted file mode 100644 index c015bbe9bc..0000000000 --- a/ext/Win32API/getch.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'Win32API' - -getch = Win32API.new("crtdll", "_getch", [], 'L') - -puts getch.Call.chr diff --git a/ext/Win32API/point.rb b/ext/Win32API/point.rb deleted file mode 100644 index 60e265f3ee..0000000000 --- a/ext/Win32API/point.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'Win32API' - -getCursorPos = Win32API.new("user32", "GetCursorPos", ['P'], 'V') - -lpPoint = " " * 8 # store two LONGs -getCursorPos.Call(lpPoint) -x, y = lpPoint.unpack("LL") # get the actual values - -print "x: ", x, "\n" -print "y: ", y, "\n" - -ods = Win32API.new("kernel32", "OutputDebugString", ['P'], 'V') -ods.Call("Hello, World\n"); - -GetDesktopWindow = Win32API.new("user32", "GetDesktopWindow", [], 'L') -GetActiveWindow = Win32API.new("user32", "GetActiveWindow", [], 'L') -SendMessage = Win32API.new("user32", "SendMessage", ['L'] * 4, 'L') -SendMessage.Call GetDesktopWindow.Call, 274, 0xf140, 0 diff --git a/ext/curses/curses.c b/ext/curses/curses.c index 69b5636a25..edf677ad8e 100644 --- a/ext/curses/curses.c +++ b/ext/curses/curses.c @@ -41,7 +41,7 @@ struct windata { static void no_window() { - Fail("already closed window"); + rb_raise(rb_eRuntimeError, "already closed window"); } #define GetWINDOW(obj, winp) {\ @@ -69,7 +69,7 @@ prep_window(class, window) struct windata *winp; if (window == NULL) { - Fail("failed to create window"); + rb_raise(rb_eRuntimeError, "failed to create window"); } obj = Data_Make_Struct(class, struct windata, 0, free_window, winp); @@ -86,7 +86,7 @@ curses_init_screen() { initscr(); if (stdscr == 0) { - Fail("cannot initialize curses"); + rb_raise(rb_eRuntimeError, "cannot initialize curses"); } clear(); rb_stdscr = prep_window(cWindow, stdscr); @@ -129,9 +129,9 @@ curses_closed() { #ifdef HAVE_ISENDWIN if (isendwin()) { - return TRUE; + return Qtrue; } - return FALSE; + return Qfalse; #else rb_notimplement(); #endif @@ -354,7 +354,7 @@ curses_getstr(obj) { char rtn[1024]; /* This should be big enough.. I hope */ getstr(rtn); - return str_taint(str_new2(rtn)); + return rb_str_taint(rb_str_new2(rtn)); } /* def delch */ @@ -404,7 +404,7 @@ window_s_new(class, lines, cols, top, left) window = newwin(NUM2INT(lines), NUM2INT(cols), NUM2INT(top), NUM2INT(left)); wclear(window); w = prep_window(class, window); - obj_call_init(w); + rb_obj_call_init(w); return w; } @@ -723,7 +723,7 @@ window_getstr(obj) GetWINDOW(obj, winp); wgetstr(winp->window, rtn); - return str_taint(str_new2(rtn)); + return rb_str_taint(rb_str_new2(rtn)); } /* def delch */ @@ -789,7 +789,7 @@ Init_curses() rb_define_module_function(mCurses, "lines", curses_lines, 0); rb_define_module_function(mCurses, "cols", curses_cols, 0); - cWindow = rb_define_class_under(mCurses, "Window", cObject); + cWindow = rb_define_class_under(mCurses, "Window", rb_cObject); rb_define_singleton_method(cWindow, "new", window_s_new, 4); rb_define_method(cWindow, "subwin", window_subwin, 4); rb_define_method(cWindow, "close", window_close, 0); diff --git a/ext/dbm/dbm.c b/ext/dbm/dbm.c index 9bd981862e..eb1f5c937a 100644 --- a/ext/dbm/dbm.c +++ b/ext/dbm/dbm.c @@ -21,7 +21,7 @@ VALUE cDBM; -extern VALUE mEnumerable; +extern VALUE rb_mEnumerable; struct dbmdata { int di_size; @@ -31,7 +31,7 @@ struct dbmdata { static void closed_dbm() { - Fail("closed DBM file"); + rb_raise(rb_eRuntimeError, "closed DBM file"); } #define GetDBM(obj, dbmp) {\ @@ -86,7 +86,7 @@ fdbm_s_open(argc, argv, class) obj = Data_Make_Struct(class,struct dbmdata,0,free_dbm,dbmp); dbmp->di_dbm = dbm; dbmp->di_size = -1; - obj_call_init(obj); + rb_obj_call_init(obj); return obj; } @@ -123,7 +123,7 @@ fdbm_fetch(obj, keystr) if (value.dptr == 0) { return Qnil; } - return str_taint(str_new(value.dptr, value.dsize)); + return rb_str_taint(rb_str_new(value.dptr, value.dsize)); } static VALUE @@ -135,9 +135,9 @@ fdbm_indexes(argc, argv, obj) VALUE new; int i; - new = ary_new2(argc); + new = rb_ary_new2(argc); for (i=0; i<argc; i++) { - ary_push(new, fdbm_fetch(obj, argv[i])); + rb_ary_push(new, fdbm_fetch(obj, argv[i])); } return new; @@ -161,13 +161,13 @@ fdbm_delete(obj, keystr) value = dbm_fetch(dbm, key); if (value.dptr == 0) { - if (iterator_p()) rb_yield(keystr); + if (rb_iterator_p()) rb_yield(keystr); return Qnil; } if (dbm_delete(dbm, key)) { dbmp->di_size = -1; - Fail("dbm_delete failed"); + rb_raise(rb_eRuntimeError, "dbm_delete failed"); } else if (dbmp->di_size >= 0) { dbmp->di_size--; @@ -193,9 +193,9 @@ fdbm_shift(obj) val = dbm_fetch(dbm, key); dbm_delete(dbm, key); - keystr = str_taint(str_new(key.dptr, key.dsize)); - valstr = str_taint(str_new(val.dptr, val.dsize)); - return assoc_new(keystr, valstr); + keystr = rb_str_taint(rb_str_new(key.dptr, key.dsize)); + valstr = rb_str_taint(rb_str_new(val.dptr, val.dsize)); + return rb_assoc_new(keystr, valstr); } static VALUE @@ -212,11 +212,11 @@ fdbm_delete_if(obj) dbm = dbmp->di_dbm; for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { val = dbm_fetch(dbm, key); - keystr = str_taint(str_new(key.dptr, key.dsize)); - valstr = str_taint(str_new(val.dptr, val.dsize)); - if (RTEST(rb_yield(assoc_new(keystr, valstr)))) { + keystr = rb_str_taint(rb_str_new(key.dptr, key.dsize)); + valstr = rb_str_taint(rb_str_new(val.dptr, val.dsize)); + if (RTEST(rb_yield(rb_assoc_new(keystr, valstr)))) { if (dbm_delete(dbm, key)) { - Fail("dbm_delete failed"); + rb_raise(rb_eRuntimeError, "dbm_delete failed"); } } } @@ -237,7 +237,7 @@ fdbm_clear(obj) dbmp->di_size = -1; for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { if (dbm_delete(dbm, key)) { - Fail("dbm_delete failed"); + rb_raise(rb_eRuntimeError, "dbm_delete failed"); } } return obj; @@ -251,15 +251,15 @@ fdbm_invert(obj) struct dbmdata *dbmp; DBM *dbm; VALUE keystr, valstr; - VALUE hash = hash_new(); + VALUE hash = rb_hash_new(); GetDBM(obj, dbmp); dbm = dbmp->di_dbm; for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { val = dbm_fetch(dbm, key); - keystr = str_taint(str_new(key.dptr, key.dsize)); - valstr = str_taint(str_new(val.dptr, val.dsize)); - hash_aset(hash, valstr, keystr); + keystr = rb_str_taint(rb_str_new(key.dptr, key.dsize)); + valstr = rb_str_taint(rb_str_new(val.dptr, val.dsize)); + rb_hash_aset(hash, valstr, keystr); } return obj; } @@ -279,7 +279,7 @@ update_i(pair, dbm) { Check_Type(pair, T_ARRAY); if (RARRAY(pair)->len < 2) { - ArgError("pair must be [key, value]"); + rb_raise(rb_eArgError, "pair must be [key, value]"); } fdbm_store(dbm, RARRAY(pair)->ptr[0], RARRAY(pair)->ptr[1]); return Qnil; @@ -316,14 +316,14 @@ fdbm_store(obj, keystr, valstr) } rb_secure(4); - keystr = obj_as_string(keystr); + keystr = rb_obj_as_string(keystr); key.dptr = RSTRING(keystr)->ptr; key.dsize = RSTRING(keystr)->len; if (NIL_P(valstr)) return fdbm_delete(obj, keystr); - valstr = obj_as_string(valstr); + valstr = rb_obj_as_string(valstr); val.dptr = RSTRING(valstr)->ptr; val.dsize = RSTRING(valstr)->len; @@ -335,7 +335,7 @@ fdbm_store(obj, keystr, valstr) dbm_clearerr(dbm); #endif if (errno == EPERM) rb_sys_fail(0); - Fail("dbm_store failed"); + rb_raise(rb_eRuntimeError, "dbm_store failed"); } return valstr; @@ -382,8 +382,8 @@ fdbm_empty_p(obj) else { i = dbmp->di_size; } - if (i == 0) return TRUE; - return FALSE; + if (i == 0) return Qtrue; + return Qfalse; } static VALUE @@ -398,7 +398,7 @@ fdbm_each_value(obj) dbm = dbmp->di_dbm; for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { val = dbm_fetch(dbm, key); - rb_yield(str_taint(str_new(val.dptr, val.dsize))); + rb_yield(rb_str_taint(rb_str_new(val.dptr, val.dsize))); } return obj; } @@ -414,7 +414,7 @@ fdbm_each_key(obj) GetDBM(obj, dbmp); dbm = dbmp->di_dbm; for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - rb_yield(str_taint(str_new(key.dptr, key.dsize))); + rb_yield(rb_str_taint(rb_str_new(key.dptr, key.dsize))); } return obj; } @@ -433,9 +433,9 @@ fdbm_each_pair(obj) for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { val = dbm_fetch(dbm, key); - keystr = str_taint(str_new(key.dptr, key.dsize)); - valstr = str_taint(str_new(val.dptr, val.dsize)); - rb_yield(assoc_new(keystr, valstr)); + keystr = rb_str_taint(rb_str_new(key.dptr, key.dsize)); + valstr = rb_str_taint(rb_str_new(val.dptr, val.dsize)); + rb_yield(rb_assoc_new(keystr, valstr)); } return obj; @@ -453,9 +453,9 @@ fdbm_keys(obj) GetDBM(obj, dbmp); dbm = dbmp->di_dbm; - ary = ary_new(); + ary = rb_ary_new(); for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - ary_push(ary, str_taint(str_new(key.dptr, key.dsize))); + rb_ary_push(ary, rb_str_taint(rb_str_new(key.dptr, key.dsize))); } return ary; @@ -473,10 +473,10 @@ fdbm_values(obj) GetDBM(obj, dbmp); dbm = dbmp->di_dbm; - ary = ary_new(); + ary = rb_ary_new(); for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { val = dbm_fetch(dbm, key); - ary_push(ary, str_taint(str_new(val.dptr, val.dsize))); + rb_ary_push(ary, rb_str_taint(rb_str_new(val.dptr, val.dsize))); } return ary; @@ -497,8 +497,8 @@ fdbm_has_key(obj, keystr) GetDBM(obj, dbmp); dbm = dbmp->di_dbm; val = dbm_fetch(dbm, key); - if (val.dptr) return TRUE; - return FALSE; + if (val.dptr) return Qtrue; + return Qfalse; } static VALUE @@ -519,9 +519,9 @@ fdbm_has_value(obj, valstr) val = dbm_fetch(dbm, key); if (val.dsize == RSTRING(valstr)->len && memcmp(val.dptr, RSTRING(valstr)->ptr, val.dsize) == 0) - return TRUE; + return Qtrue; } - return FALSE; + return Qfalse; } static VALUE @@ -536,11 +536,11 @@ fdbm_to_a(obj) GetDBM(obj, dbmp); dbm = dbmp->di_dbm; - ary = ary_new(); + ary = rb_ary_new(); for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { val = dbm_fetch(dbm, key); - ary_push(ary, assoc_new(str_taint(str_new(key.dptr, key.dsize)), - str_taint(str_new(val.dptr, val.dsize)))); + rb_ary_push(ary, rb_assoc_new(rb_str_taint(rb_str_new(key.dptr, key.dsize)), + rb_str_taint(rb_str_new(val.dptr, val.dsize)))); } return ary; @@ -548,8 +548,8 @@ fdbm_to_a(obj) Init_dbm() { - cDBM = rb_define_class("DBM", cObject); - rb_include_module(cDBM, mEnumerable); + cDBM = rb_define_class("DBM", rb_cObject); + rb_include_module(cDBM, rb_mEnumerable); rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1); rb_define_singleton_method(cDBM, "new", fdbm_s_open, -1); diff --git a/ext/etc/etc.c b/ext/etc/etc.c index 7bb7796663..5315166799 100644 --- a/ext/etc/etc.c +++ b/ext/etc/etc.c @@ -37,7 +37,7 @@ etc_getlogin(obj) #endif if (login) - return str_new2(login); + return rb_str_new2(login); return Qnil; } @@ -47,36 +47,36 @@ setup_passwd(pwd) struct passwd *pwd; { if (pwd == 0) rb_sys_fail("/etc/passwd"); - return struct_new(sPasswd, - str_new2(pwd->pw_name), - str_new2(pwd->pw_passwd), - INT2FIX(pwd->pw_uid), - INT2FIX(pwd->pw_gid), + return rb_struct_new(sPasswd, + rb_str_new2(pwd->pw_name), + rb_str_new2(pwd->pw_passwd), + INT2FIX(pwd->pw_uid), + INT2FIX(pwd->pw_gid), #ifdef PW_GECOS - str_new2(pwd->pw_gecos), + rb_str_new2(pwd->pw_gecos), #endif - str_new2(pwd->pw_dir), - str_new2(pwd->pw_shell), + rb_str_new2(pwd->pw_dir), + rb_str_new2(pwd->pw_shell), #ifdef PW_CHANGE - INT2FIX(pwd->pw_change), + INT2FIX(pwd->pw_change), #endif #ifdef PW_QUOTA - INT2FIX(pwd->pw_quota), + INT2FIX(pwd->pw_quota), #endif #ifdef PW_AGE - INT2FIX(pwd->pw_age), + INT2FIX(pwd->pw_age), #endif #ifdef PW_CLASS - str_new2(pwd->pw_class), + rb_str_new2(pwd->pw_class), #endif #ifdef PW_COMMENT - str_new2(pwd->pw_comment), + rb_str_new2(pwd->pw_comment), #endif #ifdef PW_EXPIRE - INT2FIX(pwd->pw_expire), + INT2FIX(pwd->pw_expire), #endif - 0 /*dummy*/ - ); + 0 /*dummy*/ + ); } #endif @@ -98,7 +98,7 @@ etc_getpwuid(argc, argv, obj) uid = getuid(); } pwd = getpwuid(uid); - if (pwd == 0) Fail("can't find user for %d", uid); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %d", uid); return setup_passwd(pwd); #else return Qnil; @@ -114,7 +114,7 @@ etc_getpwnam(obj, nam) Check_Type(nam, T_STRING); pwd = getpwnam(RSTRING(nam)->ptr); - if (pwd == 0) Fail("can't find user for %s", RSTRING(nam)->ptr); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %s", RSTRING(nam)->ptr); return setup_passwd(pwd); #else return Qnil; @@ -128,7 +128,7 @@ etc_passwd(obj) #if defined(HAVE_GETPWENT) struct passwd *pw; - if (iterator_p()) { + if (rb_iterator_p()) { setpwent(); while (pw = getpwent()) { rb_yield(setup_passwd(pw)); @@ -137,7 +137,7 @@ etc_passwd(obj) return obj; } pw = getpwent(); - if (pw == 0) Fail("can't fetch next -- /etc/passwd"); + if (pw == 0) rb_raise(rb_eRuntimeError, "can't fetch next -- /etc/passwd"); return setup_passwd(pw); #else return Qnil; @@ -152,17 +152,17 @@ setup_group(grp) VALUE mem; char **tbl; - mem = ary_new(); + mem = rb_ary_new(); tbl = grp->gr_mem; while (*tbl) { - ary_push(mem, str_new2(*tbl)); + rb_ary_push(mem, rb_str_new2(*tbl)); tbl++; } - return struct_new(sGroup, - str_new2(grp->gr_name), - str_new2(grp->gr_passwd), - INT2FIX(grp->gr_gid), - mem); + return rb_struct_new(sGroup, + rb_str_new2(grp->gr_name), + rb_str_new2(grp->gr_passwd), + INT2FIX(grp->gr_gid), + mem); } #endif @@ -176,7 +176,7 @@ etc_getgrgid(obj, id) gid = NUM2INT(id); grp = getgrgid(gid); - if (grp == 0) Fail("can't find group for %d", gid); + if (grp == 0) rb_raise(rb_eArgError, "can't find group for %d", gid); return setup_group(grp); #else return Qnil; @@ -192,7 +192,7 @@ etc_getgrnam(obj, nam) Check_Type(nam, T_STRING); grp = getgrnam(RSTRING(nam)->ptr); - if (grp == 0) Fail("can't find group for %s", RSTRING(nam)->ptr); + if (grp == 0) rb_raise(rb_eArgError, "can't find group for %s", RSTRING(nam)->ptr); return setup_group(grp); #else return Qnil; @@ -206,7 +206,7 @@ etc_group(obj) #ifdef HAVE_GETGRENT struct group *grp; - if (iterator_p()) { + if (rb_iterator_p()) { setgrent(); while (grp = getgrent()) { rb_yield(setup_group(grp)); @@ -237,32 +237,32 @@ Init_etc() rb_define_module_function(mEtc, "getgrnam", etc_getgrnam, 1); rb_define_module_function(mEtc, "group", etc_group, 0); - sPasswd = struct_define("Passwd", - "name", "passwd", "uid", "gid", - "gecos", "dir", "shell", + sPasswd = rb_struct_define("Passwd", + "name", "passwd", "uid", "gid", + "gecos", "dir", "shell", #ifdef PW_CHANGE - "change", + "change", #endif #ifdef PW_QUOTA - "quota", + "quota", #endif #ifdef PW_AGE - "age", + "age", #endif #ifdef PW_CLASS - "class", + "class", #endif #ifdef PW_COMMENT - "comment", + "comment", #endif #ifdef PW_EXPIRE - "expire", + "expire", #endif - 0); + 0); rb_global_variable(&sPasswd); #ifdef HAVE_GETGRENT - sGroup = struct_define("Group", "name", "passwd", "gid", "mem", 0); + sGroup = rb_struct_define("Group", "name", "passwd", "gid", "mem", 0); rb_global_variable(&sGroup); #endif } diff --git a/ext/gtk/gtk.c b/ext/gtk/gtk.c index 6c14fdd869..d2a67396e0 100644 --- a/ext/gtk/gtk.c +++ b/ext/gtk/gtk.c @@ -15,7 +15,7 @@ #include <signal.h> extern VALUE rb_argv, rb_argv0; -extern VALUE cData; +extern VALUE rb_cData; static VALUE mGtk; @@ -100,7 +100,7 @@ static VALUE gAcceleratorTable; static VALUE gStyle; static VALUE gPreviewInfo; static VALUE gAllocation; -static VALUE gRequisiton; +static VALUE gRequisition; static VALUE mRC; @@ -163,14 +163,14 @@ get_gobject(obj) Check_Type(obj, T_OBJECT); data = RDATA(rb_ivar_get(obj, id_gtkdata)); if (NIL_P(data) || data->dmark != gobj_mark) { - TypeError("not a Gtk object"); + rb_raise(rb_eTypeError, "not a Gtk object"); } Data_Get_Struct(data, GtkObject, gtkp); if (!gtkp) { - ArgError("destroyed GtkObject"); + rb_raise(rb_eArgError, "destroyed GtkObject"); } if (!GTK_IS_OBJECT(gtkp)) { - TypeError("not a GtkObject"); + rb_raise(rb_eTypeError, "not a GtkObject"); } return gtkp; @@ -206,10 +206,10 @@ add_relative(obj, relative) VALUE ary = rb_ivar_get(obj, id_relatives); if (NIL_P(ary) || TYPE(ary) != T_ARRAY) { - ary = ary_new(); + ary = rb_ary_new(); rb_ivar_set(obj, id_relatives, ary); } - ary_push(ary, relative); + rb_ary_push(ary, relative); } static VALUE gtk_object_list; @@ -228,7 +228,7 @@ delete_gobject(gtkobj, obj) { struct RData *data; - ary_delete(gtk_object_list, obj); + rb_ary_delete(gtk_object_list, obj); data = RDATA(rb_ivar_get(obj, id_gtkdata)); data->dfree = 0; data->data = 0; @@ -241,13 +241,13 @@ set_gobject(obj, gtkobj) { VALUE data; - data = Data_Wrap_Struct(cData, gobj_mark, 0, gtkobj); + data = Data_Wrap_Struct(rb_cData, gobj_mark, 0, gtkobj); gtk_object_set_user_data(gtkobj, (gpointer)obj); rb_ivar_set(obj, id_gtkdata, data); gtk_signal_connect(gtkobj, "destroy", (GtkSignalFunc)delete_gobject, (gpointer)obj); - ary_push(gtk_object_list, obj); + rb_ary_push(gtk_object_list, obj); } static VALUE @@ -255,7 +255,7 @@ make_gobject(klass, gtkobj) VALUE klass; GtkObject *gtkobj; { - VALUE obj = obj_alloc(klass); + VALUE obj = rb_obj_alloc(klass); set_gobject(obj, gtkobj); return obj; @@ -294,8 +294,8 @@ get_gstyle(style) GtkStyle *gstyle; if (NIL_P(style)) return NULL; - if (!obj_is_instance_of(style, gStyle)) { - TypeError("not a GtkStyle"); + if (!rb_obj_is_instance_of(style, gStyle)) { + rb_raise(rb_eTypeError, "not a GtkStyle"); } Data_Get_Struct(style, GtkStyle, gstyle); @@ -321,8 +321,8 @@ get_gtkacceltbl(value) if (NIL_P(value)) return NULL; - if (!obj_is_instance_of(value, gAcceleratorTable)) { - TypeError("not an AcceleratorTable"); + if (!rb_obj_is_instance_of(value, gAcceleratorTable)) { + rb_raise(rb_eTypeError, "not an AcceleratorTable"); } Data_Get_Struct(value, GtkAcceleratorTable, tbl); @@ -344,8 +344,8 @@ get_gtkprevinfo(value) if (NIL_P(value)) return NULL; - if (!obj_is_instance_of(value, gPreviewInfo)) { - TypeError("not a PreviewInfo"); + if (!rb_obj_is_instance_of(value, gPreviewInfo)) { + rb_raise(rb_eTypeError, "not a PreviewInfo"); } Data_Get_Struct(value, GtkPreviewInfo, info); @@ -372,8 +372,8 @@ get_gdkfont(font) if (NIL_P(font)) return NULL; - if (!obj_is_instance_of(font, gdkFont)) { - TypeError("not a GdkFont"); + if (!rb_obj_is_instance_of(font, gdkFont)) { + rb_raise(rb_eTypeError, "not a GdkFont"); } Data_Get_Struct(font, GdkFont, gfont); @@ -381,12 +381,62 @@ get_gdkfont(font) } static VALUE +gdkfnt_load_font(self, name) + VALUE self, name; +{ + GdkFont *font; + + font = gdk_font_load(STR2CSTR(name)); + return Data_Wrap_Struct(gdkFont, 0, gdk_font_unref, font); + /* return make_gdkfont(new); */ +} +static VALUE +gdkfnt_load_fontset(self, name) + VALUE self, name; +{ + GdkFont *new; + + new = gdk_fontset_load(STR2CSTR(name)); + return make_gdkfont(new); +} +static VALUE +gdkfnt_new(self, name) + VALUE self, name; +{ + char *cname = STR2CSTR(name); + return (strchr(cname, ',') == NULL) + ? gdkfnt_load_font(self, name) + : gdkfnt_load_fontset(self, name); +} +static VALUE +gdkfnt_string_width(self, str) + VALUE self, str; +{ + int w; + + w = gdk_string_width(get_gdkfont(self), STR2CSTR(str)); + return INT2NUM(w); +} +static VALUE +gdkfnt_ascent(self) + VALUE self; +{ + return INT2NUM(get_gdkfont(self)->ascent); +} +static VALUE +gdkfnt_descent(self) + VALUE self; +{ + return INT2NUM(get_gdkfont(self)->descent); +} + +static VALUE gdkfnt_equal(fn1, fn2) VALUE fn1, fn2; { if (gdk_font_equal(get_gdkfont(fn1), get_gdkfont(fn2))) - return TRUE; - return FALSE; + return Qtrue; + return Qfalse; } static VALUE @@ -413,8 +463,8 @@ get_tobj(obj, klass) if (NIL_P(obj)) return NULL; - if (!obj_is_instance_of(obj, klass)) { - TypeError("not a %s", rb_class2name(klass)); + if (!rb_obj_is_instance_of(obj, klass)) { + rb_raise(rb_eTypeError, "not a %s", rb_class2name(klass)); } Data_Get_Struct(obj, void, ptr); @@ -436,8 +486,8 @@ get_tobj(obj, klass) #define make_gallocation(c) make_tobj(c, gAllocation, sizeof(GtkAllocation)) #define get_gallocation(c) ((GtkAllocation*)get_tobj(c, gAllocation)) -#define make_grequisiton(c) make_tobj(c, gRequisiton, sizeof(GtkRequisition)) -#define get_grequisiton(c) ((GtkRequisition*)get_tobj(c, gRequisiton)) +#define make_grequisition(c) make_tobj(c, gRequisition, sizeof(GtkRequisition)) +#define get_grequisition(c) ((GtkRequisition*)get_tobj(c, gRequisition)) #define make_gdkrectangle(r) make_tobj(r, gdkRectangle, sizeof(GdkRectangle)) #define get_gdkrectangle(r) ((GdkRectangle*)get_tobj(r, gdkRectangle)) @@ -458,8 +508,8 @@ get_gdkcmap(cmap) if (NIL_P(cmap)) return NULL; - if (!obj_is_kind_of(cmap, gdkColormap)) { - TypeError("not a GdkColormap"); + if (!rb_obj_is_kind_of(cmap, gdkColormap)) { + rb_raise(rb_eTypeError, "not a GdkColormap"); } Data_Get_Struct(cmap, GdkColormap, gcmap); @@ -482,8 +532,8 @@ get_gdkvisual(visual) if (NIL_P(visual)) return NULL; - if (!obj_is_kind_of(visual, gdkVisual)) { - TypeError("not a GdkVisual"); + if (!rb_obj_is_kind_of(visual, gdkVisual)) { + rb_raise(rb_eTypeError, "not a GdkVisual"); } Data_Get_Struct(visual, GdkVisual, gvisual); @@ -517,8 +567,8 @@ get_gdkdraw(draw, klass, kname) if (NIL_P(draw)) return NULL; - if (!obj_is_kind_of(draw, klass)) { - TypeError("not a %s", kname); + if (!rb_obj_is_kind_of(draw, klass)) { + rb_raise(rb_eTypeError, "not a %s", kname); } Data_Get_Struct(draw, GdkDrawable, d); @@ -538,7 +588,7 @@ gdkdraw_get_geometry(self) gdk_window_get_geometry(get_gdkdrawable(self), &x, &y, &width, &height, &depth); - return ary_new3(5, INT2NUM(x), INT2NUM(y), + return rb_ary_new3(5, INT2NUM(x), INT2NUM(y), INT2NUM(width), INT2NUM(height), INT2NUM(depth)); } @@ -582,9 +632,9 @@ gdkpmap_create_from_xpm(self, win, tcolor, fname) get_gdkcolor(tcolor), STR2CSTR(fname)); if (!new) { - ArgError("Pixmap not created from %s", STR2CSTR(fname)); + rb_raise(rb_eArgError, "Pixmap not created from %s", STR2CSTR(fname)); } - return assoc_new(make_gdkpixmap2(self,new), + return rb_assoc_new(make_gdkpixmap2(self,new), make_gdkbitmap(mask)); } @@ -608,7 +658,7 @@ gdkpmap_create_from_xpm_d(self, win, tcolor, data) get_gdkcolor(tcolor), buf); - return assoc_new(make_gdkpixmap2(self,new), + return rb_assoc_new(make_gdkpixmap2(self,new), make_gdkbitmap(mask)); } @@ -652,12 +702,12 @@ get_gdkimage(image) if (NIL_P(image)) return NULL; - if (!obj_is_instance_of(image, gdkImage)) { - TypeError("not a GdkImage"); + if (!rb_obj_is_instance_of(image, gdkImage)) { + rb_raise(rb_eTypeError, "not a GdkImage"); } Data_Get_Struct(image, GdkImage, gimage); if (gimage == 0) { - ArgError("destroyed GdkImage"); + rb_raise(rb_eArgError, "destroyed GdkImage"); } return gimage; @@ -671,7 +721,7 @@ gdkimage_s_newbmap(klass, visual, data, w, h) Check_Type(data, T_STRING); if (RSTRING(data)->len < w * h) { - ArgError("data too short"); + rb_raise(rb_eArgError, "data too short"); } return make_gdkimage(gdk_image_new_bitmap(get_gdkvisual(visual), RSTRING(data)->ptr, @@ -735,7 +785,7 @@ gdkwin_get_pointer(self) int x, y; GdkModifierType state; gdk_window_get_pointer(get_gdkwindow(self), &x, &y, &state); - return ary_new3(3, INT2FIX(x), INT2FIX(y), INT2FIX((int)state)); + return rb_ary_new3(3, INT2FIX(x), INT2FIX(y), INT2FIX((int)state)); } @@ -776,6 +826,49 @@ gdkwin_root_window(self) return INT2NUM(GDK_ROOT_WINDOW() ); } +static VALUE +gdkwin_clear(self) + VALUE self; +{ + gdk_window_clear(get_gdkwindow(self)); + return self; +} +static VALUE +gdkwin_clear_area(self, x,y,w,h) + VALUE self,x,y,w,h; +{ + gdk_window_clear_area(get_gdkwindow(self), + NUM2INT(x), NUM2INT(y), NUM2INT(w), NUM2INT(h)); + return self; +} +static VALUE +gdkwin_clear_area_e(self, x,y,w,h) + VALUE self,x,y,w,h; +{ + gdk_window_clear_area_e(get_gdkwindow(self), + NUM2INT(x), NUM2INT(y), NUM2INT(w), NUM2INT(h)); + return self; +} + +static VALUE +gdkwin_set_background(self, c) + VALUE self, c; +{ + GdkColor color; + color.pixel = NUM2INT(c); + gdk_window_set_background(get_gdkwindow(self), &color); + return self; +} + +static VALUE +gdkwin_set_back_pixmap(self, pixmap, parent_relative) + VALUE self, pixmap, parent_relative; +{ + gdk_window_set_back_pixmap(get_gdkwindow(self), get_gdkpixmap(pixmap), + NUM2INT(parent_relative)); + return self; +} + static VALUE make_gdkevent(event) @@ -808,8 +901,8 @@ get_gdkevent(event) if (NIL_P(event)) return NULL; - if (!obj_is_kind_of(event, gdkEvent)) { - TypeError("not a GdkEvent... "); + if (!rb_obj_is_instance_of(event, gdkEvent)) { + rb_raise(rb_eTypeError, "not a GdkEvent"); } Data_Get_Struct(event, GdkEvent, gevent); @@ -832,12 +925,12 @@ get_gdkgc(gc) if (NIL_P(gc)) return NULL; - if (!obj_is_instance_of(gc, gdkGC)) { - TypeError("not a GdkGC"); + if (!rb_obj_is_instance_of(gc, gdkGC)) { + rb_raise(rb_eTypeError, "not a GdkGC"); } Data_Get_Struct(gc, GdkGC, ggc); if (ggc == 0) { - ArgError("destroyed GdkGC"); + rb_raise(rb_eArgError, "destroyed GdkGC"); } return ggc; @@ -868,13 +961,75 @@ gdkgc_destroy(self) } static VALUE +gdkgc_set_function(self, func) + VALUE func; +{ + GdkFunction f; + f = (GdkFunction) NUM2INT(func); + if (f != GDK_COPY && f != GDK_INVERT && f != GDK_XOR) + ArgError("function out of range"); + + gdk_gc_set_function(get_gdkgc(self), f); + return func; +} + +static VALUE +gdkgc_set_foreground(self, pix) + VALUE pix; +{ + GdkColor c; + c.pixel = NUM2INT(pix); + gdk_gc_set_foreground(get_gdkgc(self), &c); + return pix; +} +static VALUE +gdkgc_set_background(self, pix) + VALUE pix; +{ + GdkColor c; + c.pixel = NUM2INT(pix); + gdk_gc_set_background(get_gdkgc(self), &c); + return pix; +} +static VALUE +gdkgc_set_clip_mask(self, mask) + VALUE mask; +{ + gdk_gc_set_clip_mask(get_gdkgc(self), get_gdkbitmap(mask)); + return mask; +} +static VALUE +gdkgc_set_clip_origin(self, x, y) + VALUE x, y; +{ + gdk_gc_set_clip_origin(get_gdkgc(self), NUM2INT(x), NUM2INT(y)); + return self; +} +static VALUE +gdkgc_set_clip_rectangle(self, rectangle) + VALUE rectangle; +{ + gdk_gc_set_clip_rectangle(get_gdkgc(self), get_gdkrectangle(rectangle)); + return rectangle; +} +/* +static VALUE +gdkgc_set_clip_region(self, region) + VALUE region; +{ + gdk_gc_set_clip_region(get_gdkgc(self), get_gdkregion(region)); + return region; +} +*/ + +static VALUE glist2ary(list) GList *list; { - VALUE ary = ary_new(); + VALUE ary = rb_ary_new(); while (list) { - ary_push(ary, get_value_from_gobject(GTK_OBJECT(list->data))); + rb_ary_push(ary, get_value_from_gobject(GTK_OBJECT(list->data))); list = list->next; } @@ -916,10 +1071,10 @@ static VALUE gslist2ary(list) GSList *list; { - VALUE ary = ary_new(); + VALUE ary = rb_ary_new(); while (list) { - ary_push(ary, get_value_from_gobject(GTK_OBJECT(list->data))); + rb_ary_push(ary, get_value_from_gobject(GTK_OBJECT(list->data))); list = list->next; } @@ -953,11 +1108,11 @@ arg_to_value(arg) break; case GTK_TYPE_FLOAT: - return float_new(GTK_VALUE_FLOAT(*arg)); + return rb_float_new(GTK_VALUE_FLOAT(*arg)); break; case GTK_TYPE_STRING: - return str_new2(GTK_VALUE_STRING(*arg)); + return rb_str_new2(GTK_VALUE_STRING(*arg)); break; case GTK_TYPE_OBJECT: @@ -1023,7 +1178,7 @@ arg_to_value(arg) case GTK_TYPE_C_CALLBACK: unsupported: default: - TypeError("unsupported arg type %s (fundamental type %s)", + rb_raise(rb_eTypeError, "unsupported arg type %s (fundamental type %s)", gtk_type_name(arg->type), gtk_type_name(GTK_FUNDAMENTAL_TYPE(arg->type))); break; @@ -1041,58 +1196,54 @@ signal_setup_args(obj, sig, argc, params, args) int i; char *signame = rb_id2name(sig); - if (obj_is_kind_of(obj, gWidget)) { + if (rb_obj_is_kind_of(obj, gWidget)) { if (strcmp(signame, "draw") == 0) { - ary_push(args, make_gdkrectangle(GTK_VALUE_POINTER(params[0]))); + rb_ary_push(args, make_gdkrectangle(GTK_VALUE_POINTER(params[0]))); return; } if (strcmp(signame, "size_request") == 0) { - ary_push(args, make_grequisiton(GTK_VALUE_POINTER(params[0]))); + rb_ary_push(args, make_grequisition(GTK_VALUE_POINTER(params[0]))); return; } if (strcmp(signame, "size_allocate") == 0) { - ary_push(args, make_gallocation(GTK_VALUE_POINTER(params[0]))); + rb_ary_push(args, make_gallocation(GTK_VALUE_POINTER(params[0]))); return; } } - else if (obj_is_kind_of(obj, gWindow)) { + if (rb_obj_is_kind_of(obj, gWindow)) { if (strcmp(signame, "move_resize") == 0) { - ary_push(args, NUM2INT(*GTK_RETLOC_INT(params[0]))); - ary_push(args, NUM2INT(*GTK_RETLOC_INT(params[1]))); - ary_push(args, NUM2INT(GTK_VALUE_INT(params[3]))); - ary_push(args, NUM2INT(GTK_VALUE_INT(params[4]))); + rb_ary_push(args, INT2NUM(*GTK_RETLOC_INT(params[0]))); + rb_ary_push(args, INT2NUM(*GTK_RETLOC_INT(params[1]))); + rb_ary_push(args, INT2NUM(GTK_VALUE_INT(params[3]))); + rb_ary_push(args, INT2NUM(GTK_VALUE_INT(params[4]))); return; } if (strcmp(signame, "set_focus") == 0) { - ary_push(args, get_value_from_gobject(GTK_VALUE_POINTER(params[0]))); + rb_ary_push(args, get_value_from_gobject(GTK_VALUE_POINTER(params[0]))); return; } } - else if (obj_is_kind_of(obj, gEntry)) { + if (rb_obj_is_kind_of(obj, gEntry)) { if (strcmp(signame, "insert_position") == 0) { - ary_push(args, NUM2INT(*GTK_RETLOC_INT(params[0]))); + rb_ary_push(args, INT2NUM(*GTK_RETLOC_INT(params[0]))); return; } } - else if (obj_is_kind_of(obj, gCList)) { - if (strcmp(signame, "select_row") == 0) { - if (GTK_VALUE_POINTER(params[0])) - ary_push(args, make_gdkevent(GTK_VALUE_POINTER(params[0]))); - else - ary_push(args, Qnil); - return; - } - if (strcmp(signame, "unselect_row") == 0) { - if (GTK_VALUE_POINTER(params[0])) - ary_push(args, make_gdkevent(GTK_VALUE_POINTER(params[0]))); + if (rb_obj_is_kind_of(obj, gCList)) { + if (strcmp(signame, "select_row") == 0 || + strcmp(signame, "unselect_row") == 0) { + rb_ary_push(args, INT2NUM(GTK_VALUE_INT(params[0]))); + rb_ary_push(args, INT2NUM(GTK_VALUE_INT(params[1]))); + if (GTK_VALUE_POINTER(params[2])) + rb_ary_push(args, make_gdkevent(GTK_VALUE_POINTER(params[2]))); else - ary_push(args, Qnil); + rb_ary_push(args, Qnil); return; } } for (i=0; i<argc; i++) { - ary_push(args, arg_to_value(params)); + rb_ary_push(args, arg_to_value(params)); params++; } } @@ -1186,7 +1337,7 @@ arg_set_value(arg, value) case GTK_TYPE_SIGNAL: case GTK_TYPE_C_CALLBACK: default: - TypeError("unsupported return type %s (fundamental type %s)", + rb_raise(rb_eTypeError, "unsupported return type %s (fundamental type %s)", gtk_type_name(arg->type), gtk_type_name(GTK_FUNDAMENTAL_TYPE(arg->type))); break; @@ -1205,12 +1356,12 @@ signal_callback(widget, data, nparams, params) VALUE a = RARRAY(data)->ptr[2]; ID id = NUM2INT(RARRAY(data)->ptr[1]); VALUE result = Qnil; - VALUE args = ary_new2(nparams+1+RARRAY(a)->len); + VALUE args = rb_ary_new2(nparams+1+RARRAY(a)->len); int i; signal_setup_args(self, id, nparams, params, args); for (i=0; i<RARRAY(a)->len; i++) { - ary_push(args, RARRAY(a)->ptr[i]); + rb_ary_push(args, RARRAY(a)->ptr[i]); } if (NIL_P(proc)) { if (rb_respond_to(self, id)) { @@ -1218,7 +1369,7 @@ signal_callback(widget, data, nparams, params) } } else { - ary_unshift(args, self); + rb_ary_unshift(args, self); result = rb_apply(proc, id_call, args); } arg_set_value(params+nparams, result); @@ -1238,7 +1389,7 @@ gobj_initialize(argc, argv, self) VALUE *argv; VALUE self; { - Fail("can't instantiate class %s", rb_class2name(self)); + rb_raise(rb_eRuntimeError, "can't instantiate class %s", rb_class2name(self)); } static VALUE @@ -1249,7 +1400,7 @@ gobj_smethod_added(self, id) char *name = rb_id2name(NUM2INT(id)); if (gtk_signal_lookup(name, GTK_OBJECT_TYPE(obj))) { - VALUE data = ary_new3(3, Qnil, id, ary_new2(0)); + VALUE data = rb_ary_new3(3, Qnil, id, rb_ary_new2(0)); add_relative(self, data); gtk_signal_connect_interp(obj, name, @@ -1273,12 +1424,12 @@ try_get_gobject(self) } static VALUE -gobj_equal(self, other) +grb_obj_equal(self, other) VALUE self, other; { - if (self == other) return TRUE; - if (get_gobject(self) == try_get_gobject(other)) return TRUE; - return FALSE; + if (self == other) return Qtrue; + if (get_gobject(self) == try_get_gobject(other)) return Qtrue; + return Qfalse; } static VALUE @@ -1296,7 +1447,7 @@ gobj_inspect(self) else { sprintf(s, "#<%s: id=0x%x>", cname, get_gobject(self)); } - return str_new2(s); + return rb_str_new2(s); } static VALUE @@ -1344,7 +1495,7 @@ gobj_sig_connect(argc, argv, self) rb_scan_args(argc, argv, "1*", &sig, &args); id = rb_intern(STR2CSTR(sig)); - data = ary_new3(3, f_lambda(), INT2NUM(id), args); + data = rb_ary_new3(3, rb_f_lambda(), INT2NUM(id), args); add_relative(self, data); i = gtk_signal_connect_interp(GTK_OBJECT(get_widget(self)), STR2CSTR(sig), @@ -1366,7 +1517,7 @@ gobj_sig_connect_after(argc, argv, self) rb_scan_args(argc, argv, "1*", &sig, &args); id = rb_intern(STR2CSTR(sig)); - data = ary_new3(3, f_lambda(), INT2NUM(id), args); + data = rb_ary_new3(3, rb_f_lambda(), INT2NUM(id), args); add_relative(self, data); i = gtk_signal_connect_interp(GTK_OBJECT(get_widget(self)), STR2CSTR(sig), @@ -1443,7 +1594,7 @@ cont_foreach(argc, argv, self) rb_scan_args(argc, argv, "01", &callback); if (NIL_P(callback)) { - callback = f_lambda(); + callback = rb_f_lambda(); } gtk_container_foreach(GTK_CONTAINER(get_widget(self)), exec_callback, (gpointer)callback); @@ -1482,14 +1633,14 @@ cont_children_callback(widget, data) { VALUE ary = (VALUE)data; - ary_push(ary, get_value_from_gobject(GTK_OBJECT(widget))); + rb_ary_push(ary, get_value_from_gobject(GTK_OBJECT(widget))); } static VALUE cont_children(self, direction) VALUE self, direction; { - VALUE ary = ary_new(); + VALUE ary = rb_ary_new(); gtk_container_foreach(GTK_CONTAINER(get_widget(self)), cont_children_callback, @@ -1537,6 +1688,31 @@ misc_set_padding(self, xpad, ypad) } static VALUE +misc_get_xalign(self) + VALUE self; +{ + return float_new(GTK_MISC(get_widget(self))->xalign); +} +static VALUE +misc_get_yalign(self) + VALUE self; +{ + return float_new(GTK_MISC(get_widget(self))->yalign); +} +static VALUE +misc_get_xpad(self) + VALUE self; +{ + return INT2NUM(GTK_MISC(get_widget(self))->xpad); +} +static VALUE +misc_get_ypad(self) + VALUE self; +{ + return INT2NUM(GTK_MISC(get_widget(self))->ypad); +} + +static VALUE arrow_initialize(self, arrow_t, shadow_t) VALUE self, arrow_t, shadow_t; { @@ -1707,9 +1883,14 @@ widget_queue_resize(self) } static VALUE -widget_draw(self, rect) - VALUE self, rect; +widget_draw(argc, argv, self) + int argc; + VALUE *argv; + VALUE self; { + VALUE rect; + + rb_scan_args(argc, argv, "01", &rect); gtk_widget_draw(get_widget(self), get_gdkrectangle(rect)); return self; } @@ -1742,7 +1923,7 @@ static VALUE widget_size_request(self, req) VALUE self, req; { - gtk_widget_size_request(get_widget(self), get_grequisiton(req)); + gtk_widget_size_request(get_widget(self), get_grequisition(req)); return self; } @@ -1813,8 +1994,8 @@ widget_visible(self) VALUE self; { if (GTK_WIDGET_VISIBLE(get_widget(self))) - return TRUE; - return FALSE; + return Qtrue; + return Qfalse; } static VALUE @@ -1824,6 +2005,14 @@ widget_reparent(self, parent) gtk_widget_reparent(get_widget(self), get_widget(parent)); return self; } +static VALUE +widget_mapped(self) + VALUE self; +{ + if (GTK_WIDGET_MAPPED(get_widget(self))) + return TRUE; + return FALSE; +} static VALUE widget_popup(self, x, y) @@ -1890,7 +2079,7 @@ widget_get_name(self) { char *name = gtk_widget_get_name(get_widget(self)); - return str_new2(name); + return rb_str_new2(name); } static VALUE @@ -1962,7 +2151,7 @@ widget_get_ancestor(self, type) { GtkWidget *widget = get_widget(self); #if 0 - if (obj_is_kind_of(type, cClass)) { + if (rb_obj_is_kind_of(type, rb_cClass)) { } #endif widget = gtk_widget_get_ancestor(widget, NUM2INT(type)); @@ -2004,7 +2193,7 @@ widget_get_pointer(self) int x, y; gtk_widget_get_pointer(get_widget(self), &x, &y); - return assoc_new(INT2FIX(x), INT2FIX(y)); + return rb_assoc_new(INT2FIX(x), INT2FIX(y)); } static VALUE @@ -2012,9 +2201,9 @@ widget_is_ancestor(self, ancestor) VALUE self, ancestor; { if (gtk_widget_is_ancestor(get_widget(self), get_widget(ancestor))) { - return TRUE; + return Qtrue; } - return FALSE; + return Qfalse; } static VALUE @@ -2022,9 +2211,9 @@ widget_is_child(self, child) VALUE self, child; { if (gtk_widget_is_child(get_widget(self), get_widget(child))) { - return TRUE; + return Qtrue; } - return FALSE; + return Qfalse; } static VALUE @@ -2169,6 +2358,23 @@ widget_get_alloc(self) } static VALUE +widget_get_requisition(self) + VALUE self; +{ + return make_grequisition(&(get_widget(self)->requisition)); +} + +static VALUE +widget_set_requisition(self, w,h) + VALUE self,w,h; +{ + GtkRequisition *r = &(get_widget(self)->requisition); + r->width = NUM2INT(w); + r->height = NUM2INT(h); + return self; +} + +static VALUE widget_state(self) VALUE self; { @@ -2183,7 +2389,7 @@ bbox_get_child_size_default(self) gtk_button_box_get_child_size_default(&min_width, &max_width); - return assoc_new(INT2FIX(min_width), INT2FIX(max_width)); + return rb_assoc_new(INT2FIX(min_width), INT2FIX(max_width)); } static VALUE @@ -2193,7 +2399,7 @@ bbox_get_child_ipadding_default(self) int ipad_x, ipad_y; gtk_button_box_get_child_ipadding_default(&ipad_x, &ipad_y); - return assoc_new(INT2FIX(ipad_x), INT2FIX(ipad_y)); + return rb_assoc_new(INT2FIX(ipad_x), INT2FIX(ipad_y)); } static VALUE @@ -2240,7 +2446,7 @@ bbox_get_child_size(self) gtk_button_box_get_child_size(GTK_BUTTON_BOX(get_widget(self)), &min_width, &max_width); - return assoc_new(INT2FIX(min_width), INT2FIX(max_width)); + return rb_assoc_new(INT2FIX(min_width), INT2FIX(max_width)); } static VALUE @@ -2251,7 +2457,7 @@ bbox_get_child_ipadding(self) gtk_button_box_get_child_ipadding(GTK_BUTTON_BOX(get_widget(self)), &ipad_x, &ipad_y); - return assoc_new(INT2FIX(ipad_x), INT2FIX(ipad_y)); + return rb_assoc_new(INT2FIX(ipad_x), INT2FIX(ipad_y)); } static VALUE @@ -2541,7 +2747,7 @@ clist_append(self, text) Check_Type(text, T_ARRAY); len = GTK_CLIST(get_widget(self))->columns; if (len > RARRAY(text)->len) { - ArgError("text too short"); + rb_raise(rb_eArgError, "text too short"); } buf = ALLOCA_N(char*, len); for (i=0; i<len; i++) { @@ -2561,7 +2767,7 @@ clist_insert(self, row, text) Check_Type(text, T_ARRAY); len = GTK_CLIST(get_widget(self))->columns; if (len > RARRAY(text)->len) { - ArgError("text too short"); + rb_raise(rb_eArgError, "text too short"); } buf = ALLOCA_N(char*, len); for (i=0; i<len; i++) { @@ -2763,7 +2969,7 @@ fsel_get_fname(self) fname = gtk_file_selection_get_filename(GTK_FILE_SELECTION(get_widget(self))); - return str_new2(fname); + return rb_str_new2(fname); } static VALUE @@ -2818,6 +3024,21 @@ label_initialize(self, label) set_widget(self, gtk_label_new(STR2CSTR(label))); return Qnil; } +static VALUE +label_get_jtype(self) + VALUE self; +{ + return(INT2FIX(GTK_LABEL(get_widget(self))->jtype)); +} +static VALUE +label_set_jtype(self, jtype) + VALUE self, jtype; +{ + GtkJustification j; + j = (GtkJustification) NUM2INT(jtype); + gtk_label_set_justify(GTK_LABEL(get_widget(self)), j); + return self; +} static VALUE label_get(self) @@ -2825,7 +3046,7 @@ label_get(self) { gchar** str; gtk_label_get(GTK_LABEL(get_widget(self)), str); - return str_new2(*str); + return rb_str_new2(*str); } static VALUE @@ -3237,7 +3458,7 @@ mitem_accelerator_text(self) char buf[1024]; /* enough? */ gtk_menu_item_accelerator_text(GTK_MENU_ITEM(get_widget(self)), buf); - return str_new2(buf); + return rb_str_new2(buf); } static VALUE @@ -3345,7 +3566,7 @@ rmitem_initialize(argc, argv, self) if (!NIL_P(arg2)) { label = STR2CSTR(arg2); } - if (obj_is_kind_of(arg1, gRMenuItem)) { + if (rb_obj_is_kind_of(arg1, gRMenuItem)) { GtkWidget *b = get_widget(arg1); list = GTK_RADIO_MENU_ITEM(b)->group; } @@ -3475,7 +3696,7 @@ static VALUE note_show_tabs(self) VALUE self; { - return GTK_NOTEBOOK(get_widget(self))->show_tabs?TRUE:FALSE; + return GTK_NOTEBOOK(get_widget(self))->show_tabs?Qtrue:Qfalse; } static VALUE @@ -3490,7 +3711,7 @@ static VALUE note_show_border(self) VALUE self; { - return GTK_NOTEBOOK(get_widget(self))->show_border?TRUE:FALSE; + return GTK_NOTEBOOK(get_widget(self))->show_border?Qtrue:Qfalse; } static VALUE @@ -3562,7 +3783,7 @@ image_get(self) gtk_image_get(GTK_IMAGE(get_widget(self)), &val, &mask); - return assoc_new(make_gdkimage(self, val), + return rb_assoc_new(make_gdkimage(self, val), make_gdkpixmap(mask)); } @@ -3606,13 +3827,13 @@ preview_put_row(self, src, dst, x, y, w) } Check_Type(src, T_STRING); if (RSTRING(src)->len < dlen) { - ArgError("src too short"); + rb_raise(rb_eArgError, "src too short"); } Check_Type(dst, T_STRING); if (RSTRING(dst)->len < dlen) { - ArgError("dst too short"); + rb_raise(rb_eArgError, "dst too short"); } - str_modify(dst); + rb_str_modify(dst); gtk_preview_put_row(GTK_PREVIEW(get_widget(self)), RSTRING(src)->ptr, RSTRING(dst)->ptr, NUM2INT(x), NUM2INT(y), width); @@ -3631,7 +3852,7 @@ preview_draw_row(self, data, x, y, w) } Check_Type(data, T_STRING); if (RSTRING(data)->len < dlen) { - ArgError("data too short"); + rb_raise(rb_eArgError, "data too short"); } gtk_preview_draw_row(GTK_PREVIEW(get_widget(self)), RSTRING(data)->ptr, @@ -3960,7 +4181,7 @@ tbar_append_item(self, text, ttext, ptext, icon, func) VALUE self, text, ttext, ptext, icon, func; { if (NIL_P(func)) { - func = f_lambda(); + func = rb_f_lambda(); } gtk_toolbar_append_item(GTK_TOOLBAR(get_widget(self)), NIL_P(text)?NULL:STR2CSTR(text), @@ -3977,7 +4198,7 @@ tbar_prepend_item(self, text, ttext, ptext, icon, func) VALUE self, text, ttext, ptext, icon, func; { if (NIL_P(func)) { - func = f_lambda(); + func = rb_f_lambda(); } gtk_toolbar_prepend_item(GTK_TOOLBAR(get_widget(self)), NIL_P(text)?NULL:STR2CSTR(text), @@ -3994,7 +4215,7 @@ tbar_insert_item(self, text, ttext, ptext, icon, func, pos) VALUE self, text, ttext, ptext, icon, func, pos; { if (NIL_P(func)) { - func = f_lambda(); + func = rb_f_lambda(); } gtk_toolbar_insert_item(GTK_TOOLBAR(get_widget(self)), NIL_P(text)?NULL:STR2CSTR(text), @@ -4389,8 +4610,8 @@ tbtn_active(self) VALUE self; { if (GTK_TOGGLE_BUTTON(get_widget(self))->active) - return TRUE; - return FALSE; + return Qtrue; + return Qfalse; } static VALUE @@ -4430,7 +4651,7 @@ rbtn_initialize(argc, argv, self) if (!NIL_P(arg2)) { label = STR2CSTR(arg2); } - if (obj_is_kind_of(arg1, gRButton)) { + if (rb_obj_is_kind_of(arg1, gRButton)) { GtkWidget *b = get_widget(arg1); list = GTK_RADIO_BUTTON(b)->group; } @@ -4468,7 +4689,7 @@ box_pack_start_or_end(argc, argv, self, start) gint expand, fill, padding; GtkWidget *widget, *child; - expand = fill = TRUE; padding = 0; + expand = fill = Qtrue; padding = 0; switch (rb_scan_args(argc, argv, "13", &arg0, &arg1, &arg2, &arg3)) { case 4: padding = NUM2INT(arg3); @@ -4556,7 +4777,7 @@ colorsel_set_color(self, color) Check_Type(color, T_ARRAY); if (RARRAY(color)->len < 3) { - ArgError("color array too small"); + rb_raise(rb_eArgError, "color array too small"); } buf[0] = NUM2DBL(RARRAY(color)->ptr[0]); buf[1] = NUM2DBL(RARRAY(color)->ptr[1]); @@ -4574,10 +4795,10 @@ colorsel_get_color(self) VALUE ary; gtk_color_selection_get_color(GTK_COLOR_SELECTION(get_widget(self)), buf); - ary = ary_new2(3); - ary_push(ary, NUM2DBL(buf[0])); - ary_push(ary, NUM2DBL(buf[1])); - ary_push(ary, NUM2DBL(buf[2])); + ary = rb_ary_new2(3); + rb_ary_push(ary, NUM2DBL(buf[0])); + rb_ary_push(ary, NUM2DBL(buf[1])); + rb_ary_push(ary, NUM2DBL(buf[2])); return ary; } @@ -4616,7 +4837,7 @@ pixmap_get(self) gtk_pixmap_get(GTK_PIXMAP(get_widget(self)), &val, &mask); - return assoc_new(make_gdkpixmap(val), + return rb_assoc_new(make_gdkpixmap(val), make_gdkbitmap(mask)); } @@ -4677,7 +4898,7 @@ edit_get_chars(self, start, end) s = gtk_editable_get_chars(GTK_EDITABLE(get_widget(self)), NUM2INT(start), NUM2INT(end)); - return str_new2(s); + return rb_str_new2(s); } static VALUE @@ -4776,7 +4997,7 @@ entry_get_text(self) { gchar* text; text = gtk_entry_get_text(GTK_ENTRY(get_widget(self))); - return str_new2(text); + return rb_str_new2(text); } static VALUE @@ -4847,7 +5068,7 @@ static VALUE gamma_gamma(self) VALUE self; { - return float_new(GTK_GAMMA_CURVE(get_widget(self))->gamma); + return rb_float_new(GTK_GAMMA_CURVE(get_widget(self))->gamma); } static VALUE @@ -5492,6 +5713,13 @@ style_s_new(klass) } static VALUE +style_copy(self) + VALUE self; +{ + return make_gstyle(gtk_style_copy(get_gstyle(self))); +} + +static VALUE style_attach(self, win) VALUE self, win; { @@ -5506,7 +5734,7 @@ style_detach(self) } static VALUE -style_set_bg(self, win, state_type) +style_set_background(self, win, state_type) VALUE self, win, state_type; { gtk_style_set_background(get_gstyle(self), get_gdkwindow(win), @@ -5520,7 +5748,7 @@ style_fg(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkcolor(get_gstyle(self)->fg[i]); } @@ -5530,7 +5758,7 @@ style_bg(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkcolor(get_gstyle(self)->bg[i]); } @@ -5540,7 +5768,7 @@ style_light(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkcolor(get_gstyle(self)->light[i]); } @@ -5550,7 +5778,7 @@ style_dark(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkcolor(get_gstyle(self)->dark[i]); } @@ -5560,7 +5788,7 @@ style_mid(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkcolor(get_gstyle(self)->mid[i]); } @@ -5570,7 +5798,7 @@ style_text(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkcolor(get_gstyle(self)->text[i]); } @@ -5580,10 +5808,37 @@ style_base(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkcolor(get_gstyle(self)->base[i]); } +#define DEFINE_STYLE_SET_COLOR(FUNC, TYPE) \ +static VALUE \ +FUNC(self, idx, r, g, b) \ + VALUE self, idx, r, g, b; \ +{ \ + GtkStyle *style; \ + GdkColor *color; \ + int i = NUM2INT(idx); \ + \ + if (i < 0 || 5 < i) ArgError("state out of range"); \ + style = get_gstyle(self); \ + if (style->fg_gc[0] != NULL) ArgError("you must not change widget style."); \ + color = &(style-> TYPE [i]); \ + color->red = NUM2INT(r); \ + color->green = NUM2INT(g); \ + color->blue = NUM2INT(b); \ + return(make_gdkcolor(*color)); \ +} \ + +DEFINE_STYLE_SET_COLOR(style_set_fg, fg) +DEFINE_STYLE_SET_COLOR(style_set_bg, bg) +DEFINE_STYLE_SET_COLOR(style_set_light, light) +DEFINE_STYLE_SET_COLOR(style_set_dark, dark) +DEFINE_STYLE_SET_COLOR(style_set_mid, mid) +DEFINE_STYLE_SET_COLOR(style_set_text, text) +DEFINE_STYLE_SET_COLOR(style_set_base, base) + static VALUE style_black(self) { @@ -5603,12 +5858,29 @@ style_font(self) } static VALUE +style_set_font(self, f) + VALUE f; +{ + GdkFont *font = get_gdkfont(f); + GtkStyle *style = get_gstyle(self); + + if (style->fg_gc[0] != NULL) ArgError("you must not change widget style."); + if (style->font != NULL) + gdk_font_unref(style->font); + + gdk_font_ref(font); + style->font = font; + + return self; +} + +static VALUE style_fg_gc(self, idx) VALUE self, idx; { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkgc(get_gstyle(self)->fg_gc[i]); } @@ -5618,7 +5890,7 @@ style_bg_gc(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkgc(get_gstyle(self)->bg_gc[i]); } @@ -5628,7 +5900,7 @@ style_light_gc(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkgc(get_gstyle(self)->light_gc[i]); } @@ -5638,7 +5910,7 @@ style_dark_gc(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkgc(get_gstyle(self)->dark_gc[i]); } @@ -5648,7 +5920,7 @@ style_mid_gc(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkgc(get_gstyle(self)->mid_gc[i]); } @@ -5658,7 +5930,7 @@ style_text_gc(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkgc(get_gstyle(self)->text_gc[i]); } @@ -5668,7 +5940,7 @@ style_base_gc(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkgc(get_gstyle(self)->base_gc[i]); } @@ -5690,7 +5962,7 @@ style_bg_pixmap(self, idx) { int i = NUM2INT(idx); - if (i < 0 || 5 < i) ArgError("state out of range"); + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); return make_gdkpixmap(get_gstyle(self)->bg_pixmap[i]); } @@ -5740,7 +6012,7 @@ style_draw_polygon(self,win,state_type,shadow_type,pnts,fill) for (i=0; i<RARRAY(pnts)->len; i++) { Check_Type(RARRAY(pnts)->ptr[i], T_ARRAY); if (RARRAY(RARRAY(pnts)->ptr[i])->len < 2) { - ArgError("point %d should be array of size 2", i); + rb_raise(rb_eArgError, "point %d should be array of size 2", i); } points[i].x = NUM2INT(RARRAY(RARRAY(pnts)->ptr[i])->ptr[0]); points[i].y = NUM2INT(RARRAY(RARRAY(pnts)->ptr[i])->ptr[1]); @@ -5805,6 +6077,32 @@ gallocation_h(self) return INT2NUM(get_gallocation(self)->height); } +static VALUE +grequisition_w(self) +{ + return INT2NUM(get_grequisition(self)->width); +} +static VALUE +grequisition_h(self) +{ + return INT2NUM(get_grequisition(self)->height); +} +/* +static VALUE +grequisition_set_w(self, w) + VALUE self, w; +{ + get_grequisition(self)->width = NUM2INT(w); + return self; +} +static VALUE +grequisition_set_h(self, h) + VALUE self, h; +{ + get_grequisition(self)->height = NUM2INT(h); + return self; +} +*/ static VALUE gtk_m_main(self) @@ -5908,7 +6206,7 @@ gdkdraw_draw_poly(self, gc, filled, pnts) for (i=0; i<RARRAY(pnts)->len; i++) { Check_Type(RARRAY(pnts)->ptr[i], T_ARRAY); if (RARRAY(RARRAY(pnts)->ptr[i])->len < 2) { - ArgError("point %d should be array of size 2", i); + rb_raise(rb_eArgError, "point %d should be array of size 2", i); } points[i].x = NUM2INT(RARRAY(RARRAY(pnts)->ptr[i])->ptr[0]); points[i].y = NUM2INT(RARRAY(RARRAY(pnts)->ptr[i])->ptr[1]); @@ -5980,7 +6278,7 @@ gdkdraw_draw_pnts(self, gc, pnts) for (i=0; i<RARRAY(pnts)->len; i++) { Check_Type(RARRAY(pnts)->ptr[i], T_ARRAY); if (RARRAY(RARRAY(pnts)->ptr[i])->len < 2) { - ArgError("point %d should be array of size 2", i); + rb_raise(rb_eArgError, "point %d should be array of size 2", i); } points[i].x = NUM2INT(RARRAY(RARRAY(pnts)->ptr[i])->ptr[0]); points[i].y = NUM2INT(RARRAY(RARRAY(pnts)->ptr[i])->ptr[1]); @@ -6003,7 +6301,7 @@ gdkdraw_draw_segs(self, gc, segs) for (i=0; i<RARRAY(segs)->len; i++) { Check_Type(RARRAY(segs)->ptr[i], T_ARRAY); if (RARRAY(RARRAY(segs)->ptr[i])->len < 4) { - ArgError("segment %d should be array of size 4", i); + rb_raise(rb_eArgError, "segment %d should be array of size 4", i); } segments[i].x1 = NUM2INT(RARRAY(RARRAY(segs)->ptr[i])->ptr[0]); segments[i].y1 = NUM2INT(RARRAY(RARRAY(segs)->ptr[i])->ptr[1]); @@ -6119,9 +6417,9 @@ idle() { CHECK_INTS; #ifdef THREAD - if (!thread_critical) thread_schedule(); + if (!rb_thread_critical) rb_thread_schedule(); #endif - return TRUE; + return Qtrue; } static void @@ -6138,7 +6436,7 @@ timeout_add(self, interval) int id; id = gtk_timeout_add_interp(NUM2INT(interval), exec_interval, - (gpointer)f_lambda(), 0); + (gpointer)rb_f_lambda(), 0); return INT2FIX(id); } @@ -6156,7 +6454,7 @@ idle_add(self) { int id; - id = gtk_idle_add_interp(exec_interval, (gpointer)f_lambda(), 0); + id = gtk_idle_add_interp(exec_interval, (gpointer)rb_f_lambda(), 0); return INT2FIX(id); } @@ -6176,21 +6474,21 @@ static void gtkwarn(mesg) char *mesg; { - rb_funcall(warn_handler, id_call, 1, str_new2(mesg)); + rb_funcall(warn_handler, id_call, 1, rb_str_new2(mesg)); } static void gtkmesg(mesg) char *mesg; { - rb_funcall(mesg_handler, id_call, 1, str_new2(mesg)); + rb_funcall(mesg_handler, id_call, 1, rb_str_new2(mesg)); } static void gtkprint(mesg) char *mesg; { - rb_funcall(print_handler, id_call, 1, str_new2(mesg)); + rb_funcall(print_handler, id_call, 1, rb_str_new2(mesg)); } static VALUE @@ -6203,7 +6501,7 @@ set_warning_handler(argc, argv, self) rb_scan_args(argc, argv, "01", &handler); if (NIL_P(handler)) { - handler = f_lambda(); + handler = rb_f_lambda(); } g_set_warning_handler(gtkwarn); return handler; @@ -6219,7 +6517,7 @@ set_message_handler(argc, argv, self) rb_scan_args(argc, argv, "01", &handler); if (NIL_P(handler)) { - handler = f_lambda(); + handler = rb_f_lambda(); } g_set_message_handler(gtkmesg); return handler; @@ -6235,7 +6533,7 @@ set_print_handler(argc, argv, self) rb_scan_args(argc, argv, "01", &handler); if (NIL_P(handler)) { - handler = f_lambda(); + handler = rb_f_lambda(); } g_set_print_handler(gtkprint); return handler; @@ -6245,7 +6543,7 @@ static void gtkerr(mesg) char *mesg; { - Fail("%s", mesg); + rb_raise(rb_eRuntimeError, "%s", mesg); } void @@ -6255,12 +6553,12 @@ Init_gtk() char **argv; gtk_set_locale(); - gtk_object_list = ary_new(); + gtk_object_list = rb_ary_new(); rb_global_variable(>k_object_list); mGtk = rb_define_module("Gtk"); - gObject = rb_define_class_under(mGtk, "Object", cObject); + gObject = rb_define_class_under(mGtk, "Object", rb_cObject); gWidget = rb_define_class_under(mGtk, "Widget", gObject); gContainer = rb_define_class_under(mGtk, "Container", gWidget); gBin = rb_define_class_under(mGtk, "Bin", gContainer); @@ -6332,38 +6630,38 @@ Init_gtk() gTable = rb_define_class_under(mGtk, "Table", gContainer); gText = rb_define_class_under(mGtk, "Text", gEditable); gToolbar = rb_define_class_under(mGtk, "Toolbar", gContainer); - gTooltips = rb_define_class_under(mGtk, "Tooltips", cData); + gTooltips = rb_define_class_under(mGtk, "Tooltips", rb_cData); gTree = rb_define_class_under(mGtk, "Tree", gContainer); gTreeItem = rb_define_class_under(mGtk, "TreeItem", gItem); gViewPort = rb_define_class_under(mGtk, "ViewPort", gBin); - gAcceleratorTable = rb_define_class_under(mGtk, "AcceleratorTable", cData); - gStyle = rb_define_class_under(mGtk, "Style", cData); - gPreviewInfo = rb_define_class_under(mGtk, "PreviewInfo", cData); - gRequisiton = rb_define_class_under(mGtk, "Requisiton", cData); - gAllocation = rb_define_class_under(mGtk, "Allocation", cData); + gAcceleratorTable = rb_define_class_under(mGtk, "AcceleratorTable", rb_cData); + gStyle = rb_define_class_under(mGtk, "Style", rb_cData); + gPreviewInfo = rb_define_class_under(mGtk, "PreviewInfo", rb_cData); + gRequisition = rb_define_class_under(mGtk, "Requisition", rb_cData); + gAllocation = rb_define_class_under(mGtk, "Allocation", rb_cData); mRC = rb_define_module_under(mGtk, "RC"); mGdk = rb_define_module("Gdk"); - gdkFont = rb_define_class_under(mGdk, "Font", cData); - gdkColor = rb_define_class_under(mGdk, "Color", cData); - gdkDrawable = rb_define_class_under(mGdk, "Drawable", cData); + gdkFont = rb_define_class_under(mGdk, "Font", rb_cData); + gdkColor = rb_define_class_under(mGdk, "Color", rb_cData); + gdkDrawable = rb_define_class_under(mGdk, "Drawable", rb_cData); gdkPixmap = rb_define_class_under(mGdk, "Pixmap", gdkDrawable); gdkBitmap = rb_define_class_under(mGdk, "Bitmap", gdkPixmap); gdkWindow = rb_define_class_under(mGdk, "Window", gdkDrawable); - gdkImage = rb_define_class_under(mGdk, "Image", cData); - gdkVisual = rb_define_class_under(mGdk, "Visual", cData); - gdkGC = rb_define_class_under(mGdk, "GC", cData); - gdkGCValues = rb_define_class_under(mGdk, "GCValues", cData); - gdkRectangle = rb_define_class_under(mGdk, "Rectangle", cData); - gdkSegment = rb_define_class_under(mGdk, "Segment", cData); - gdkWindowAttr = rb_define_class_under(mGdk, "WindowAttr", cData); - gdkCursor = rb_define_class_under(mGdk, "Cursor", cData); - gdkAtom = rb_define_class_under(mGdk, "Atom", cData); - gdkColorContext = rb_define_class_under(mGdk, "ColorContext", cData); - gdkEvent = rb_define_class_under(mGdk, "gdkEvent", cData); + gdkImage = rb_define_class_under(mGdk, "Image", rb_cData); + gdkVisual = rb_define_class_under(mGdk, "Visual", rb_cData); + gdkGC = rb_define_class_under(mGdk, "GC", rb_cData); + gdkGCValues = rb_define_class_under(mGdk, "GCValues", rb_cData); + gdkRectangle = rb_define_class_under(mGdk, "Rectangle", rb_cData); + gdkSegment = rb_define_class_under(mGdk, "Segment", rb_cData); + gdkWindowAttr = rb_define_class_under(mGdk, "WindowAttr", rb_cData); + gdkCursor = rb_define_class_under(mGdk, "Cursor", rb_cData); + gdkAtom = rb_define_class_under(mGdk, "Atom", rb_cData); + gdkColorContext = rb_define_class_under(mGdk, "ColotContext", rb_cData); + gdkEvent = rb_define_class_under(mGdk, "gdkEvent", rb_cData); gdkEventType = rb_define_class_under(mGdk, "gdkEventType", gdkEvent); gdkEventAny = rb_define_class_under(mGdk, "gdkEventAny", gdkEvent); @@ -6396,7 +6694,7 @@ Init_gtk() rb_define_method(gObject, "signal_connect", gobj_sig_connect, -1); rb_define_method(gObject, "signal_connect_after", gobj_sig_connect_after, -1); rb_define_method(gObject, "singleton_method_added", gobj_smethod_added, 1); - rb_define_method(gObject, "==", gobj_equal, 1); + rb_define_method(gObject, "==", grb_obj_equal, 1); rb_define_method(gObject, "inspect", gobj_inspect, 0); /* Widget */ @@ -6410,7 +6708,7 @@ Init_gtk() rb_define_method(gWidget, "unrealize", widget_unrealize, 0); rb_define_method(gWidget, "queue_draw", widget_queue_draw, 0); rb_define_method(gWidget, "queue_resize", widget_queue_resize, 0); - rb_define_method(gWidget, "draw", widget_draw, 1); + rb_define_method(gWidget, "draw", widget_draw, -1); rb_define_method(gWidget, "draw_focus", widget_draw_focus, 0); rb_define_method(gWidget, "draw_default", widget_draw_default, 0); rb_define_method(gWidget, "draw_children", widget_draw_children, 0); @@ -6424,6 +6722,7 @@ Init_gtk() rb_define_method(gWidget, "grab_default", widget_grab_default, 0); rb_define_method(gWidget, "set_state", widget_set_state, 1); rb_define_method(gWidget, "visible?", widget_visible, 0); + rb_define_method(gWidget, "mapped?", widget_mapped, 0); rb_define_method(gWidget, "reparent", widget_reparent, 1); rb_define_method(gWidget, "popup", widget_popup, 2); rb_define_method(gWidget, "intersect", widget_intersect, 2); @@ -6439,6 +6738,8 @@ Init_gtk() rb_define_method(gWidget, "set_extension_events", widget_set_eevents, 1); rb_define_method(gWidget, "unparent", widget_unparent, 0); rb_define_method(gWidget, "allocation", widget_get_alloc, 0); + rb_define_method(gWidget, "requisition", widget_get_requisition, 0); + rb_define_method(gWidget, "set_requisition", widget_set_requisition, 2); rb_define_method(gWidget, "state", widget_state, 0); rb_define_method(gWidget, "get_toplevel", widget_get_toplevel, 0); rb_define_method(gWidget, "get_ancestor", widget_get_ancestor, 1); @@ -6509,6 +6810,10 @@ Init_gtk() /* Misc */ rb_define_method(gMisc, "set_alignment", misc_set_align, 2); rb_define_method(gMisc, "set_padding", misc_set_padding, 2); + rb_define_method(gMisc, "xalign", misc_get_xalign, 0); + rb_define_method(gMisc, "yalign", misc_get_yalign, 0); + rb_define_method(gMisc, "xpad", misc_get_xpad, 0); + rb_define_method(gMisc, "ypad", misc_get_ypad, 0); /* Arrow */ rb_define_method(gArrow, "initialize", arrow_initialize, 2); @@ -6818,6 +7123,8 @@ Init_gtk() rb_define_method(gLabel, "initialize", label_initialize, 1); rb_define_method(gLabel, "get", label_get, 0); rb_define_method(gLabel, "set", label_set, 1); + rb_define_method(gLabel, "jtype", label_get_jtype, 0); + rb_define_method(gLabel, "jtype=", label_set_jtype, 1); /* List */ rb_define_method(gList, "initialize", list_initialize, 0); @@ -7011,9 +7318,12 @@ Init_gtk() /* AcceleratorTable */ /* Style */ rb_define_singleton_method(gStyle, "new", style_s_new, 0); + rb_define_method(gStyle, "copy", style_copy, 0); + rb_define_method(gStyle, "clone", style_copy, 0); + rb_define_method(gStyle, "dup", style_copy, 0); rb_define_method(gStyle, "attach", style_attach, 1); rb_define_method(gStyle, "detach", style_detach, 0); - rb_define_method(gStyle, "set_background", style_set_bg, 0); + rb_define_method(gStyle, "set_background", style_set_background, 1); rb_define_method(gStyle, "fg", style_fg, 1); rb_define_method(gStyle, "bg", style_bg, 1); rb_define_method(gStyle, "light", style_light, 1); @@ -7021,9 +7331,18 @@ Init_gtk() rb_define_method(gStyle, "mid", style_mid, 1); rb_define_method(gStyle, "text", style_text, 1); rb_define_method(gStyle, "base", style_base, 1); + rb_define_method(gStyle, "set_fg", style_set_fg, 4); + rb_define_method(gStyle, "set_bg", style_set_bg, 4); + rb_define_method(gStyle, "set_light", style_set_light, 4); + rb_define_method(gStyle, "set_dark", style_set_dark, 4); + rb_define_method(gStyle, "set_mid", style_set_mid, 4); + rb_define_method(gStyle, "set_text", style_set_text, 4); + rb_define_method(gStyle, "set_base", style_set_base, 4); + rb_define_method(gStyle, "black", style_black, 0); rb_define_method(gStyle, "white", style_white, 0); rb_define_method(gStyle, "font", style_font, 0); + rb_define_method(gStyle, "set_font", style_set_font, 1); rb_define_method(gStyle, "fg_gc", style_fg_gc, 1); rb_define_method(gStyle, "bg_gc", style_bg_gc, 1); rb_define_method(gStyle, "light_gc", style_light_gc, 1); @@ -7050,6 +7369,13 @@ Init_gtk() rb_define_method(gAllocation, "width", gallocation_w, 0); rb_define_method(gAllocation, "height", gallocation_h, 0); + rb_define_method(gRequisition, "width", grequisition_w, 0); + rb_define_method(gRequisition, "height", grequisition_h, 0); + /* + rb_define_method(gRequisition, "width=", grequisition_set_w, 1); + rb_define_method(gRequisition, "height=", grequisition_set_h, 1); + */ + /* Gtk module */ rb_define_module_function(mGtk, "main", gtk_m_main, 0); rb_define_module_function(mGtk, "timeout_add", timeout_add, 1); @@ -7075,6 +7401,12 @@ Init_gtk() /* Gdk module */ /* GdkFont */ + rb_define_singleton_method(gdkFont, "load_font", gdkfnt_load_font, 1); + rb_define_singleton_method(gdkFont, "new", gdkfnt_new, 1); + rb_define_singleton_method(gdkFont, "load_fontset", gdkfnt_load_fontset, 1); + rb_define_method(gdkFont, "string_width", gdkfnt_string_width, 1); + rb_define_method(gdkFont, "ascent", gdkfnt_ascent, 0); + rb_define_method(gdkFont, "descent", gdkfnt_descent, 0); rb_define_method(gdkFont, "==", gdkfnt_equal, 1); /* GdkDrawable */ @@ -7112,11 +7444,23 @@ Init_gtk() rb_define_method(gdkWindow, "pointer_ungrab", gdkwin_pointer_ungrab, 1); rb_define_singleton_method(gdkWindow, "foreign_new", gdkwin_foreign_new, 1); rb_define_singleton_method(gdkWindow, "root_window", gdkwin_root_window, 0); + rb_define_method(gdkWindow, "clear", gdkwin_clear, 0); + rb_define_method(gdkWindow, "clear_area", gdkwin_clear_area, 4); + rb_define_method(gdkWindow, "clear_area_e", gdkwin_clear, 4); + rb_define_method(gdkWindow, "set_background", gdkwin_set_background, 1); + rb_define_method(gdkWindow, "set_back_pixmap", gdkwin_set_back_pixmap, 2); /* GdkGC */ rb_define_singleton_method(gdkGC, "new", gdkgc_s_new, 1); rb_define_method(gdkGC, "copy", gdkgc_copy, 1); rb_define_method(gdkGC, "destroy", gdkgc_destroy, 0); + rb_define_method(gdkGC, "set_function", gdkgc_set_function, 1); + rb_define_method(gdkGC, "set_foreground", gdkgc_set_foreground, 1); + rb_define_method(gdkGC, "set_background", gdkgc_set_background, 1); + rb_define_method(gdkGC, "set_clip_mask", gdkgc_set_clip_mask, 1); + rb_define_method(gdkGC, "set_clip_origin", gdkgc_set_clip_origin, 2); + rb_define_method(gdkGC, "set_clip_rectangle", gdkgc_set_clip_rectangle, 1); + /* rb_define_method(gdkGC, "set_clip_region", gdkgc_set_clip_region, 1); */ /* GdkImage */ rb_define_singleton_method(gdkImage, "new_bitmap", gdkimage_s_newbmap, 4); @@ -7185,6 +7529,12 @@ Init_gtk() rb_define_const(mGtk, "POLICY_ALWAYS", INT2FIX(GTK_POLICY_ALWAYS)); rb_define_const(mGtk, "POLICY_AUTOMATIC", INT2FIX(GTK_POLICY_AUTOMATIC)); + /* GtkJustification */ + rb_define_const(mGtk, "JUSTIFY_LEFT", INT2FIX(GTK_JUSTIFY_LEFT)); + rb_define_const(mGtk, "JUSTIFY_RIGHT", INT2FIX(GTK_JUSTIFY_RIGHT)); + rb_define_const(mGtk, "JUSTIFY_CENTER", INT2FIX(GTK_JUSTIFY_CENTER)); + rb_define_const(mGtk, "JUSTIFY_FILL", INT2FIX(GTK_JUSTIFY_FILL)); + /* GtkSelectionMode */ rb_define_const(mGtk, "SELECTION_SINGLE", INT2FIX(GTK_SELECTION_SINGLE)); rb_define_const(mGtk, "SELECTION_BROWSE", INT2FIX(GTK_SELECTION_BROWSE)); @@ -7248,6 +7598,11 @@ Init_gtk() rb_define_const(mGtk, "ORIENTATION_HORIZONTAL", INT2FIX(GTK_ORIENTATION_HORIZONTAL)); rb_define_const(mGtk, "ORIENTATION_VERTICAL", INT2FIX(GTK_ORIENTATION_VERTICAL)); + /* GdkMiscMode */ + rb_define_const(mGdk, "FUNCTION_COPY", INT2FIX(GDK_COPY)); + rb_define_const(mGdk, "FUNCTION_INVERT", INT2FIX(GDK_INVERT)); + rb_define_const(mGdk, "FUNCTION_XOR", INT2FIX(GDK_XOR)); + /* GdkExtensionMode */ rb_define_const(mGdk, "EXTENSION_EVENTS_NONE", INT2FIX(GDK_EXTENSION_EVENTS_NONE)); rb_define_const(mGdk, "EXTENSION_EVENTS_ALL", INT2FIX(GDK_EXTENSION_EVENTS_ALL)); @@ -7336,7 +7691,7 @@ Init_gtk() } for (i=1;i<argc;i++) { - RARRAY(rb_argv)->ptr[i] = str_taint(str_new2(argv[i])); + RARRAY(rb_argv)->ptr[i-1] = rb_str_taint(rb_str_new2(argv[i])); } RARRAY(rb_argv)->len = argc-1; diff --git a/ext/kconv/kconv.c b/ext/kconv/kconv.c index fb229c6ef6..d9bb2b4d3d 100644 --- a/ext/kconv/kconv.c +++ b/ext/kconv/kconv.c @@ -1833,7 +1833,7 @@ kconv_kconv(argc, argv) if (in_code == _NOCONV) return (VALUE)src; } - dst = str_new(0, RSTRING(src)->len*3+10); /* large enough? */ + dst = rb_str_new(0, RSTRING(src)->len*3+10); /* large enough? */ RSTRING(dst)->len = do_kconv(RSTRING(src)->ptr, RSTRING(dst)->ptr, RSTRING(dst)->len, out_code, in_code); return dst; @@ -1847,7 +1847,7 @@ kconv_tojis(obj, src) Check_Type(src, T_STRING); - dst = str_new(0, RSTRING(src)->len*3+10); /* large enough? */ + dst = rb_str_new(0, RSTRING(src)->len*3+10); /* large enough? */ RSTRING(dst)->len = do_kconv(RSTRING(src)->ptr, RSTRING(dst)->ptr, RSTRING(dst)->len, _JIS, _AUTO); return dst; @@ -1861,7 +1861,7 @@ kconv_toeuc(obj, src) Check_Type(src, T_STRING); - dst = str_new(0, RSTRING(src)->len*3+10); /* large enough? */ + dst = rb_str_new(0, RSTRING(src)->len*3+10); /* large enough? */ RSTRING(dst)->len = do_kconv(RSTRING(src)->ptr, RSTRING(dst)->ptr, RSTRING(dst)->len, _EUC, _AUTO); return (VALUE)dst; @@ -1875,7 +1875,7 @@ kconv_tosjis(obj, src) Check_Type(src, T_STRING); - dst = str_new(0, RSTRING(src)->len*3+10); /* large enough? */ + dst = rb_str_new(0, RSTRING(src)->len*3+10); /* large enough? */ RSTRING(dst)->len = do_kconv(RSTRING(src)->ptr, RSTRING(dst)->ptr, RSTRING(dst)->len, _SJIS, _AUTO); return dst; diff --git a/ext/md5/md5init.c b/ext/md5/md5init.c index 65fd996ca9..956264608b 100644 --- a/ext/md5/md5init.c +++ b/ext/md5/md5init.c @@ -42,7 +42,7 @@ md5_digest(obj) ctx = *md5; MD5Final(digest, &ctx); - return str_new(digest, 16); + return rb_str_new(digest, 16); } static VALUE @@ -77,14 +77,14 @@ md5_new(argc, argv, class) if (!NIL_P(arg)) { md5_update(obj, arg); } - obj_call_init(obj); + rb_obj_call_init(obj); return obj; } Init_md5() { - cMD5 = rb_define_class("MD5", cObject); + cMD5 = rb_define_class("MD5", rb_cObject); rb_define_singleton_method(cMD5, "new", md5_new, -1); diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb index 2dc7d38afb..85c41d240d 100644 --- a/ext/socket/extconf.rb +++ b/ext/socket/extconf.rb @@ -17,6 +17,7 @@ else end have_header("sys/un.h") if have_func(test_func) + have_func("inet_aton") have_func("hsterror") unless have_func("gethostname") have_func("uname") diff --git a/ext/socket/socket.c b/ext/socket/socket.c index bd9bae8921..f3cfafb147 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -25,7 +25,7 @@ #ifdef USE_CWGUSI extern int fileno(FILE *stream); /* <unix.mac.h> */ -extern int thread_select(int, fd_set*, fd_set*, fd_set*, struct timeval*); /* thread.c */ +extern int rb_thread_select(int, fd_set*, fd_set*, fd_set*, struct timeval*); /* thread.c */ # include <sys/errno.h> # include <GUSI.h> #endif @@ -42,26 +42,25 @@ extern int thread_select(int, fd_set*, fd_set*, fd_set*, struct timeval*); /* th #define EWOULDBLOCK EAGAIN #endif -VALUE cBasicSocket; -VALUE cIPsocket; -VALUE cTCPsocket; -VALUE cTCPserver; -VALUE cUDPsocket; +VALUE rb_cBasicSocket; +VALUE rb_cIPsocket; +VALUE rb_cTCPsocket; +VALUE rb_cTCPserver; +VALUE rb_cUDPsocket; #ifdef AF_UNIX -VALUE cUNIXsocket; -VALUE cUNIXserver; +VALUE rb_cUNIXsocket; +VALUE rb_cUNIXserver; #endif -VALUE cSocket; +VALUE rb_cSocket; -static VALUE eSocket; +static VALUE rb_eSocket; #ifdef SOCKS -VALUE cSOCKSsocket; +VALUE rb_cSOCKSsocket; void SOCKSinit(); int Rconnect(); #endif -FILE *rb_fdopen(); char *strdup(); #define INET_CLIENT 0 @@ -97,8 +96,8 @@ sock_new(class, fd) #endif fp->f2 = rb_fdopen(fd, "w"); fp->mode = FMODE_READWRITE; - io_unbuffered(fp); - obj_call_init((VALUE)sock); + rb_io_unbuffered(fp); + rb_obj_call_init((VALUE)sock); return (VALUE)sock; } @@ -119,9 +118,9 @@ bsock_shutdown(argc, argv, sock) how = 2; else { how = NUM2INT(howto); -#if 0 - if (how < 0 || 2 < how) how = 2; -#endif + if (how < 0 || 2 < how) { + rb_raise(rb_eArgError, "`how' should be either 0, 1, 2"); + } } GetOpenFile(sock, fptr); if (shutdown(fileno(fptr->f), how) == -1) @@ -156,7 +155,7 @@ bsock_setsockopt(sock, lev, optname, val) v = (char*)&i; vlen = sizeof(i); break; default: - v = str2cstr(val, &vlen); + v = rb_str2cstr(val, &vlen); } GetOpenFile(sock, fptr); @@ -184,7 +183,7 @@ bsock_getsockopt(sock, lev, optname) if (getsockopt(fileno(fptr->f), level, option, buf, &len) < 0) rb_sys_fail(fptr->path); - return str_new(buf, len); + return rb_str_new(buf, len); #else rb_notimplement(); #endif @@ -201,7 +200,7 @@ bsock_getsockname(sock) GetOpenFile(sock, fptr); if (getsockname(fileno(fptr->f), (struct sockaddr*)buf, &len) < 0) rb_sys_fail("getsockname(2)"); - return str_new(buf, len); + return rb_str_new(buf, len); } static VALUE @@ -215,7 +214,7 @@ bsock_getpeername(sock) GetOpenFile(sock, fptr); if (getpeername(fileno(fptr->f), (struct sockaddr*)buf, &len) < 0) rb_sys_fail("getpeername(2)"); - return str_new(buf, len); + return rb_str_new(buf, len); } static VALUE @@ -240,11 +239,11 @@ bsock_send(argc, argv, sock) fd = fileno(f); retry: #ifdef THREAD - thread_fd_writable(fd); + rb_thread_fd_writable(fd); #endif - m = str2cstr(msg, &mlen); + m = rb_str2cstr(msg, &mlen); if (RTEST(to)) { - t = str2cstr(to, &tlen); + t = rb_str2cstr(to, &tlen); n = sendto(fd, m, mlen, NUM2INT(flags), (struct sockaddr*)t, tlen); } @@ -259,7 +258,7 @@ bsock_send(argc, argv, sock) case EAGAIN: #endif #ifdef THREAD - thread_schedule(); + rb_thread_schedule(); #endif goto retry; } @@ -289,7 +288,6 @@ s_recv(sock, argc, argv, from) enum sock_recv_type from; { OpenFile *fptr; - FILE f; VALUE str; char buf[1024]; int fd, alen = sizeof buf; @@ -301,12 +299,12 @@ s_recv(sock, argc, argv, from) if (flg == Qnil) flags = 0; else flags = NUM2INT(flg); - str = str_new(0, NUM2INT(len)); + str = rb_str_new(0, NUM2INT(len)); GetOpenFile(sock, fptr); fd = fileno(fptr->f); #ifdef THREAD - thread_wait_fd(fd); + rb_thread_wait_fd(fd); #endif TRAP_BEG; retry: @@ -322,37 +320,34 @@ s_recv(sock, argc, argv, from) case EAGAIN: #endif #ifdef THREAD - thread_schedule(); + rb_thread_schedule(); #endif goto retry; } rb_sys_fail("recvfrom(2)"); } - str_taint(str); + rb_str_taint(str); switch (from) { case RECV_RECV: return (VALUE)str; case RECV_TCP: if (alen != sizeof(struct sockaddr_in)) { - TypeError("sockaddr size differs - should not happen"); + rb_raise(rb_eTypeError, "sockaddr size differs - should not happen"); } - return assoc_new(str, ipaddr((struct sockaddr_in *)buf)); + return rb_assoc_new(str, ipaddr((struct sockaddr_in *)buf)); case RECV_UDP: { VALUE addr = ipaddr((struct sockaddr_in *)buf); - return assoc_new(str, assoc_new(RARRAY(addr)->ptr[2], - RARRAY(addr)->ptr[1])); + return rb_assoc_new(str, rb_assoc_new(RARRAY(addr)->ptr[2], + RARRAY(addr)->ptr[1])); } #ifdef HAVE_SYS_UN_H case RECV_UNIX: - if (alen != sizeof(struct sockaddr_un)) { - TypeError("sockaddr size differs - should not happen"); - } - return assoc_new(str, unixaddr((struct sockaddr_un *)buf)); + return rb_assoc_new(str, unixaddr((struct sockaddr_un *)buf)); #endif case RECV_SOCKET: - return assoc_new(str, str_new(buf, alen)); + return rb_assoc_new(str, rb_str_new(buf, alen)); } } @@ -365,6 +360,95 @@ bsock_recv(argc, argv, sock) return s_recv(sock, argc, argv, RECV_RECV); } +static VALUE +mkipaddr(x) + unsigned long x; +{ + char buf[16]; + + x = ntohl(x); + sprintf(buf, "%d.%d.%d.%d", + (int) (x>>24) & 0xff, (int) (x>>16) & 0xff, + (int) (x>> 8) & 0xff, (int) (x>> 0) & 0xff); + return rb_str_new2(buf); +} + +static VALUE +ipaddr(sockaddr) + struct sockaddr_in *sockaddr; +{ + VALUE family, port, addr1, addr2; + VALUE ary; + struct hostent *hostent; + + family = rb_str_new2("AF_INET"); + hostent = gethostbyaddr((char*)&sockaddr->sin_addr.s_addr, + sizeof(sockaddr->sin_addr), + AF_INET); + addr1 = 0; + if (hostent) { + addr1 = rb_str_new2(hostent->h_name); + } + addr2 = mkipaddr(sockaddr->sin_addr.s_addr); + if (!addr1) addr1 = addr2; + + port = INT2FIX(ntohs(sockaddr->sin_port)); + ary = rb_ary_new3(4, family, port, addr1, addr2); + + return ary; +} + +#ifndef HAVE_INET_ATON +static unsigned long +inet_aton(host, inp) + char *host; + struct in_addr *inp; +{ + int d1, d2, d3, d4; + char ch; + + if (sscanf(host, "%d.%d.%d.%d%c", &d1, &d2, &d3, &d4, &ch) == 4 && + 0 <= d1 && d1 <= 255 && 0 <= d2 && d2 <= 255 && + 0 <= d3 && d3 <= 255 && 0 <= d4 && d4 <= 255) { + inp->s_addr = htonl( + ((long) d1 << 24) | ((long) d2 << 16) | + ((long) d3 << 8) | ((long) d4 << 0)); + return 1; + } + return 0; +} +#endif + +static void +setipaddr(name, addr) + char *name; + struct sockaddr_in *addr; +{ + struct hostent *hp; + + if (name[0] == 0) { + addr->sin_addr.s_addr = INADDR_ANY; + } + else if (name[0] == '<' && strcmp(name, "<broadcast>") == 0) { + addr->sin_addr.s_addr = INADDR_BROADCAST; + } + else if (inet_aton(name, &addr->sin_addr) != 0) { + /* ok to set addr->sin_addr */ + } + else { + hp = gethostbyname(name); + if (!hp) { +#ifdef HAVE_HSTRERROR + extern int h_errno; + rb_raise(rb_eSocket, (char *)hstrerror(h_errno)); +#else + rb_raise(rb_eSocket, "host not found"); +#endif + } + memcpy((char *) &addr->sin_addr, hp->h_addr, hp->h_length); + } +} + #if defined(THREAD) && defined(HAVE_FCNTL) static int thread_connect(fd, sockaddr, len, type) @@ -408,7 +492,7 @@ thread_connect(fd, sockaddr, len, type) #endif FD_ZERO(&fds); FD_SET(fd, &fds); - thread_select(fd+1, 0, &fds, 0, 0); + rb_thread_select(fd+1, 0, &fds, 0, 0); continue; #endif @@ -446,27 +530,23 @@ open_inet(class, h, serv, type) int hostaddr, hostaddrPtr[2]; int servport; char *syscall; - VALUE sock; if (h) { Check_SafeStr(h); host = RSTRING(h)->ptr; hostent = gethostbyname(host); if (hostent == NULL) { -#ifndef USE_CWGUSI - hostaddr = inet_addr(host); -#else - hostaddr = inet_addr(host).s_addr; -#endif + inet_aton(host, &sockaddr.sin_addr); + hostaddr = sockaddr.sin_addr.s_addr; if (hostaddr == -1) { if (type == INET_SERVER && !strlen(host)) hostaddr = INADDR_ANY; else { #ifdef HAVE_HSTRERROR extern int h_errno; - Raise(eSocket, (char *)hstrerror(h_errno)); + rb_raise(rb_eSocket, (char *)hstrerror(h_errno)); #else - Raise(eSocket, "host not found"); + rb_raise(rb_eSocket, "host not found"); #endif } } @@ -490,7 +570,7 @@ open_inet(class, h, serv, type) servport = strtoul(s, &end, 0); if (*end != '\0') { - Raise(eSocket, "no such servce %s", s); + rb_raise(rb_eSocket, "no such servce %s", s); } setup_servent: _servent.s_port = htons(servport); @@ -502,7 +582,7 @@ open_inet(class, h, serv, type) #else protoent = getprotobyname(servent->s_proto); if (protoent == NULL) { - Raise(eSocket, "no such proto %s", servent->s_proto); + rb_raise(rb_eSocket, "no such proto %s", servent->s_proto); } fd = socket(AF_INET, SOCK_STREAM, protoent->p_proto); @@ -545,7 +625,7 @@ open_inet(class, h, serv, type) } if (status < 0) { - close (fd); + close(fd); rb_sys_fail(syscall); } if (type == INET_SERVER) listen(fd, 5); @@ -580,6 +660,49 @@ socks_s_open(class, host, serv) #endif static VALUE +tcp_s_gethostbyname(obj, host) + VALUE obj, host; +{ + struct sockaddr_in addr; + struct hostent *h; + char **pch; + VALUE ary, names; + + setipaddr(STR2CSTR(host), &addr); + h = gethostbyaddr((char *)&addr.sin_addr, + sizeof(addr.sin_addr), + AF_INET); + + if (h == NULL) { +#ifdef HAVE_HSTRERROR + extern int h_errno; + rb_raise(rb_eSocket, (char *)hstrerror(h_errno)); +#else + rb_raise(rb_eSocket, "host not found"); +#endif + } + ary = rb_ary_new(); + rb_ary_push(ary, rb_str_new2(h->h_name)); + names = rb_ary_new(); + rb_ary_push(ary, names); + for (pch = h->h_aliases; *pch; pch++) { + rb_ary_push(names, rb_str_new2(*pch)); + } + rb_ary_push(ary, NUM2INT(h->h_addrtype)); +#ifdef h_addr + for (pch = h->h_addr_list; *pch; pch++) { + memcpy((char *) &addr.sin_addr, *pch, h->h_length); + rb_ary_push(ary, mkipaddr(addr.sin_addr.s_addr)); + } +#else + memcpy((char *)&addr.sin_addr, h->h_addr, h->h_length); + rb_ary_push(ary, mkipaddr(addr.sin_addr.s_addr)); +#endif + + return ary; +} + +static VALUE tcp_svr_s_open(argc, argv, class) int argc; VALUE *argv; @@ -604,7 +727,7 @@ s_accept(class, fd, sockaddr, len) retry: #ifdef THREAD - thread_wait_fd(fd); + rb_thread_wait_fd(fd); #endif TRAP_BEG; fd2 = accept(fd, sockaddr, len); @@ -617,7 +740,7 @@ s_accept(class, fd, sockaddr, len) case EAGAIN: #endif #ifdef THREAD - thread_schedule(); + rb_thread_schedule(); #endif goto retry; } @@ -636,7 +759,7 @@ tcp_accept(sock) GetOpenFile(sock, fptr); fromlen = sizeof(struct sockaddr_in); - return s_accept(cTCPsocket, fileno(fptr->f), + return s_accept(rb_cTCPsocket, fileno(fptr->f), (struct sockaddr*)&from, &fromlen); } @@ -692,81 +815,6 @@ open_unix(class, path, server) } #endif -static void -setipaddr(name, addr) - char *name; - struct sockaddr_in *addr; -{ - int d1, d2, d3, d4; - char ch; - struct hostent *hp; - long x; - - if (name[0] == 0) { - addr->sin_addr.s_addr = INADDR_ANY; - } - else if (name[0] == '<' && strcmp(name, "<broadcast>") == 0) { - addr->sin_addr.s_addr = INADDR_BROADCAST; - } - else if (sscanf(name, "%d.%d.%d.%d%c", &d1, &d2, &d3, &d4, &ch) == 4 && - 0 <= d1 && d1 <= 255 && 0 <= d2 && d2 <= 255 && - 0 <= d3 && d3 <= 255 && 0 <= d4 && d4 <= 255) { - addr->sin_addr.s_addr = htonl( - ((long) d1 << 24) | ((long) d2 << 16) | - ((long) d3 << 8) | ((long) d4 << 0)); - } - else { - hp = gethostbyname(name); - if (!hp) { -#ifdef HAVE_HSTRERROR - extern int h_errno; - Raise(eSocket, (char *)hstrerror(h_errno)); -#else - Raise(eSocket, "host not found"); -#endif - } - memcpy((char *) &addr->sin_addr, hp->h_addr, hp->h_length); - } -} - -static VALUE -mkipaddr(x) - unsigned long x; -{ - char buf[16]; - - x = ntohl(x); - sprintf(buf, "%d.%d.%d.%d", - (int) (x>>24) & 0xff, (int) (x>>16) & 0xff, - (int) (x>> 8) & 0xff, (int) (x>> 0) & 0xff); - return str_new2(buf); -} - -static VALUE -ipaddr(sockaddr) - struct sockaddr_in *sockaddr; -{ - VALUE family, port, addr1, addr2; - VALUE ary; - struct hostent *hostent; - - family = str_new2("AF_INET"); - hostent = gethostbyaddr((char*)&sockaddr->sin_addr.s_addr, - sizeof(sockaddr->sin_addr), - AF_INET); - addr1 = 0; - if (hostent) { - addr1 = str_new2(hostent->h_name); - } - addr2 = mkipaddr(sockaddr->sin_addr.s_addr); - if (!addr1) addr1 = addr2; - - port = INT2FIX(ntohs(sockaddr->sin_port)); - ary = ary_new3(4, family, port, addr1, addr2); - - return ary; -} - static VALUE ip_addr(sock) VALUE sock; @@ -803,7 +851,7 @@ ip_s_getaddress(obj, host) { struct sockaddr_in addr; - if (obj_is_kind_of(host, cInteger)) { + if (rb_obj_is_kind_of(host, rb_cInteger)) { int i = NUM2INT(host); addr.sin_addr.s_addr = htonl(i); } @@ -826,14 +874,12 @@ udp_addrsetup(host, port, addr) VALUE host, port; struct sockaddr_in *addr; { - struct hostent *hostent; - memset(addr, 0, sizeof(struct sockaddr_in)); addr->sin_family = AF_INET; if (NIL_P(host)) { addr->sin_addr.s_addr = INADDR_ANY; } - else if (obj_is_kind_of(host, cInteger)) { + else if (rb_obj_is_kind_of(host, rb_cInteger)) { int i = NUM2INT(host); addr->sin_addr.s_addr = htonl(i); } @@ -857,7 +903,7 @@ udp_addrsetup(host, port, addr) portno = strtoul(s, &end, 0); if (*end != '\0') { - Raise(eSocket, "no such servce %s", s); + rb_raise(rb_eSocket, "no such servce %s", s); } addr->sin_port = htons(port); } @@ -882,7 +928,7 @@ udp_connect(sock, host, port) case EAGAIN: #endif #ifdef THREAD - thread_schedule(); + rb_thread_schedule(); #endif goto retry; } @@ -929,7 +975,7 @@ udp_send(argc, argv, sock) udp_addrsetup(host, port, &addr); GetOpenFile(sock, fptr); f = fptr->f2?fptr->f2:fptr->f; - m = str2cstr(mesg, &mlen); + m = rb_str2cstr(mesg, &mlen); retry: n = sendto(fileno(f), m, mlen, NUM2INT(flags), (struct sockaddr*)&addr, sizeof(addr)); @@ -941,7 +987,7 @@ udp_send(argc, argv, sock) case EAGAIN: #endif #ifdef THREAD - thread_schedule(); + rb_thread_schedule(); #endif goto retry; } @@ -981,7 +1027,7 @@ unix_path(sock) rb_sys_fail(0); fptr->path = strdup(addr.sun_path); } - return str_new2(fptr->path); + return rb_str_new2(fptr->path); } static VALUE @@ -1010,7 +1056,7 @@ unix_accept(sock) GetOpenFile(sock, fptr); fromlen = sizeof(struct sockaddr_un); - return s_accept(cUNIXsocket, fileno(fptr->f), + return s_accept(rb_cUNIXsocket, fileno(fptr->f), (struct sockaddr*)&from, &fromlen); } @@ -1018,7 +1064,7 @@ static VALUE unixaddr(sockaddr) struct sockaddr_un *sockaddr; { - return assoc_new(str_new2("AF_UNIX"),str_new2(sockaddr->sun_path)); + return rb_assoc_new(rb_str_new2("AF_UNIX"),rb_str_new2(sockaddr->sun_path)); } static VALUE @@ -1102,7 +1148,7 @@ setup_domain_and_type(domain, dv, type, tv) *dv = PF_IPX; #endif else - Raise(eSocket, "Unknown socket domain %s", ptr); + rb_raise(rb_eSocket, "Unknown socket domain %s", ptr); } else { *dv = NUM2INT(domain); @@ -1130,7 +1176,7 @@ setup_domain_and_type(domain, dv, type, tv) *tv = SOCK_PACKET; #endif else - Raise(eSocket, "Unknown socket type %s", ptr); + rb_raise(rb_eSocket, "Unknown socket type %s", ptr); } else { *tv = NUM2INT(type); @@ -1143,7 +1189,6 @@ sock_s_open(class, domain, type, protocol) { int fd; int d, t; - VALUE s; setup_domain_and_type(domain, &d, type, &t); fd = socket(d, t, NUM2INT(protocol)); @@ -1164,14 +1209,13 @@ sock_s_socketpair(class, domain, type, protocol) VALUE class, domain, type, protocol; { #if !defined(NT) && !defined(__BEOS__) - int fd; int d, t, sp[2]; setup_domain_and_type(domain, &d, type, &t); if (socketpair(d, t, NUM2INT(protocol), sp) < 0) rb_sys_fail("socketpair(2)"); - return assoc_new(sock_new(class, sp[0]), sock_new(class, sp[1])); + return rb_assoc_new(sock_new(class, sp[0]), sock_new(class, sp[1])); #else rb_notimplement(); #endif @@ -1184,7 +1228,7 @@ sock_connect(sock, addr) OpenFile *fptr; Check_Type(addr, T_STRING); - str_modify(addr); + rb_str_modify(addr); GetOpenFile(sock, fptr); retry: @@ -1196,7 +1240,7 @@ sock_connect(sock, addr) case EAGAIN: #endif #ifdef THREAD - thread_schedule(); + rb_thread_schedule(); #endif goto retry; } @@ -1213,7 +1257,7 @@ sock_bind(sock, addr) OpenFile *fptr; Check_Type(addr, T_STRING); - str_modify(addr); + rb_str_modify(addr); GetOpenFile(sock, fptr); if (bind(fileno(fptr->f), (struct sockaddr*)RSTRING(addr)->ptr, RSTRING(addr)->len) < 0) @@ -1254,9 +1298,9 @@ sock_accept(sock) int len = sizeof buf; GetOpenFile(sock, fptr); - sock2 = s_accept(cSocket,fileno(fptr->f),(struct sockaddr*)buf,&len); + sock2 = s_accept(rb_cSocket,fileno(fptr->f),(struct sockaddr*)buf,&len); - return assoc_new(sock2, str_new(buf, len)); + return rb_assoc_new(sock2, rb_str_new(buf, len)); } #ifdef HAVE_GETHOSTNAME @@ -1270,7 +1314,7 @@ sock_gethostname(obj) rb_sys_fail("gethostname"); buf[sizeof buf - 1] = '\0'; - return str_new2(buf); + return rb_str_new2(buf); } #else #ifdef HAVE_UNAME @@ -1284,7 +1328,7 @@ sock_gethostname(obj) struct utsname un; uname(&un); - return str_new2(un.nodename); + return rb_str_new2(un.nodename); } #else static VALUE @@ -1300,32 +1344,31 @@ static VALUE mkhostent(h) struct hostent *h; { - struct sockaddr_in addr; char **pch; VALUE ary, names; if (h == NULL) { #ifdef HAVE_HSTRERROR extern int h_errno; - Raise(eSocket, (char *)hstrerror(h_errno)); + rb_raise(rb_eSocket, (char *)hstrerror(h_errno)); #else - Raise(eSocket, "host not found"); + rb_raise(rb_eSocket, "host not found"); #endif } - ary = ary_new(); - ary_push(ary, str_new2(h->h_name)); - names = ary_new(); - ary_push(ary, names); + ary = rb_ary_new(); + rb_ary_push(ary, rb_str_new2(h->h_name)); + names = rb_ary_new(); + rb_ary_push(ary, names); for (pch = h->h_aliases; *pch; pch++) { - ary_push(names, str_new2(*pch)); + rb_ary_push(names, rb_str_new2(*pch)); } - ary_push(ary, INT2FIX(h->h_length)); + rb_ary_push(ary, NUM2INT(h->h_addrtype)); #ifdef h_addr for (pch = h->h_addr_list; *pch; pch++) { - ary_push(ary, str_new(*pch, h->h_length)); + rb_ary_push(ary, rb_str_new(*pch, h->h_length)); } #else - ary_push(ary, str_new(h->h_addr, h->h_length)); + rb_ary_push(ary, rb_str_new(h->h_addr, h->h_length)); #endif return ary; @@ -1338,7 +1381,7 @@ sock_s_gethostbyname(obj, host) struct sockaddr_in addr; struct hostent *h; - if (obj_is_kind_of(host, cInteger)) { + if (rb_obj_is_kind_of(host, rb_cInteger)) { int i = NUM2INT(host); addr.sin_addr.s_addr = htonl(i); } @@ -1359,12 +1402,12 @@ sock_s_gethostbyaddr(argc, argv) { VALUE vaddr, vtype; int type; - char *addr; int alen; + char *addr; struct hostent *h; rb_scan_args(argc, argv, "11", &vaddr, &vtype); - addr = str2cstr(vaddr, &alen); + addr = rb_str2cstr(vaddr, &alen); if (!NIL_P(vtype)) { type = NUM2INT(vtype); } @@ -1401,7 +1444,7 @@ sock_s_getservbyaname(argc, argv) port = strtoul(s, &end, 0); if (*end != '\0') { - Raise(eSocket, "no such servce %s/%s", s, proto); + rb_raise(rb_eSocket, "no such servce %s/%s", s, proto); } } @@ -1411,237 +1454,238 @@ sock_s_getservbyaname(argc, argv) static VALUE mConst; static void -sock_define_const(name, value) +sock_rb_define_const(name, value) char *name; int value; { - rb_define_const(cSocket, name, INT2FIX(value)); + rb_define_const(rb_cSocket, name, INT2FIX(value)); rb_define_const(mConst, name, INT2FIX(value)); } Init_socket() { - eSocket = rb_define_class("SocketError", eStandardError); - - cBasicSocket = rb_define_class("BasicSocket", cIO); - rb_undef_method(CLASS_OF(cBasicSocket), "new"); - rb_undef_method(CLASS_OF(cBasicSocket), "open"); - rb_define_method(cBasicSocket, "shutdown", bsock_shutdown, -1); - rb_define_method(cBasicSocket, "setsockopt", bsock_setsockopt, 3); - rb_define_method(cBasicSocket, "getsockopt", bsock_getsockopt, 2); - rb_define_method(cBasicSocket, "getsockname", bsock_getsockname, 0); - rb_define_method(cBasicSocket, "getpeername", bsock_getpeername, 0); - rb_define_method(cBasicSocket, "send", bsock_send, -1); - rb_define_method(cBasicSocket, "recv", bsock_recv, -1); - - cIPsocket = rb_define_class("IPsocket", cBasicSocket); - rb_define_method(cIPsocket, "addr", ip_addr, 0); - rb_define_method(cIPsocket, "peeraddr", ip_peeraddr, 0); - rb_define_singleton_method(cIPsocket, "getaddress", ip_s_getaddress, 1); - - cTCPsocket = rb_define_class("TCPsocket", cIPsocket); - rb_define_singleton_method(cTCPsocket, "open", tcp_s_open, 2); - rb_define_singleton_method(cTCPsocket, "new", tcp_s_open, 2); - rb_define_method(cTCPsocket, "recvfrom", tcp_recvfrom, -1); + rb_eSocket = rb_define_class("SocketError", rb_eStandardError); + + rb_cBasicSocket = rb_define_class("BasicSocket", rb_cIO); + rb_undef_method(CLASS_OF(rb_cBasicSocket), "new"); + rb_undef_method(CLASS_OF(rb_cBasicSocket), "open"); + rb_define_method(rb_cBasicSocket, "shutdown", bsock_shutdown, -1); + rb_define_method(rb_cBasicSocket, "setsockopt", bsock_setsockopt, 3); + rb_define_method(rb_cBasicSocket, "getsockopt", bsock_getsockopt, 2); + rb_define_method(rb_cBasicSocket, "getsockname", bsock_getsockname, 0); + rb_define_method(rb_cBasicSocket, "getpeername", bsock_getpeername, 0); + rb_define_method(rb_cBasicSocket, "send", bsock_send, -1); + rb_define_method(rb_cBasicSocket, "recv", bsock_recv, -1); + + rb_cIPsocket = rb_define_class("IPsocket", rb_cBasicSocket); + rb_define_method(rb_cIPsocket, "addr", ip_addr, 0); + rb_define_method(rb_cIPsocket, "peeraddr", ip_peeraddr, 0); + rb_define_singleton_method(rb_cIPsocket, "getaddress", ip_s_getaddress, 1); + + rb_cTCPsocket = rb_define_class("TCPsocket", rb_cIPsocket); + rb_define_singleton_method(rb_cTCPsocket, "open", tcp_s_open, 2); + rb_define_singleton_method(rb_cTCPsocket, "new", tcp_s_open, 2); + rb_define_singleton_method(rb_cTCPsocket, "gethostbyname", tcp_s_gethostbyname, 1); + rb_define_method(rb_cTCPsocket, "recvfrom", tcp_recvfrom, -1); #ifdef SOCKS - cSOCKSsocket = rb_define_class("SOCKSsocket", cTCPsocket); - rb_define_singleton_method(cSOCKSsocket, "open", socks_s_open, 2); - rb_define_singleton_method(cSOCKSsocket, "new", socks_s_open, 2); + rb_cSOCKSsocket = rb_define_class("SOCKSsocket", rb_cTCPsocket); + rb_define_singleton_method(rb_cSOCKSsocket, "open", socks_s_open, 2); + rb_define_singleton_method(rb_cSOCKSsocket, "new", socks_s_open, 2); #endif - cTCPserver = rb_define_class("TCPserver", cTCPsocket); - rb_define_singleton_method(cTCPserver, "open", tcp_svr_s_open, -1); - rb_define_singleton_method(cTCPserver, "new", tcp_svr_s_open, -1); - rb_define_method(cTCPserver, "accept", tcp_accept, 0); + rb_cTCPserver = rb_define_class("TCPserver", rb_cTCPsocket); + rb_define_singleton_method(rb_cTCPserver, "open", tcp_svr_s_open, -1); + rb_define_singleton_method(rb_cTCPserver, "new", tcp_svr_s_open, -1); + rb_define_method(rb_cTCPserver, "accept", tcp_accept, 0); - cUDPsocket = rb_define_class("UDPsocket", cIPsocket); - rb_define_singleton_method(cUDPsocket, "open", udp_s_open, 0); - rb_define_singleton_method(cUDPsocket, "new", udp_s_open, 0); - rb_define_method(cUDPsocket, "connect", udp_connect, 2); - rb_define_method(cUDPsocket, "bind", udp_bind, 2); - rb_define_method(cUDPsocket, "send", udp_send, -1); - rb_define_method(cUDPsocket, "recvfrom", udp_recvfrom, -1); + rb_cUDPsocket = rb_define_class("UDPsocket", rb_cIPsocket); + rb_define_singleton_method(rb_cUDPsocket, "open", udp_s_open, 0); + rb_define_singleton_method(rb_cUDPsocket, "new", udp_s_open, 0); + rb_define_method(rb_cUDPsocket, "connect", udp_connect, 2); + rb_define_method(rb_cUDPsocket, "bind", udp_bind, 2); + rb_define_method(rb_cUDPsocket, "send", udp_send, -1); + rb_define_method(rb_cUDPsocket, "recvfrom", udp_recvfrom, -1); #ifdef HAVE_SYS_UN_H - cUNIXsocket = rb_define_class("UNIXsocket", cBasicSocket); - rb_define_singleton_method(cUNIXsocket, "open", unix_s_sock_open, 1); - rb_define_singleton_method(cUNIXsocket, "new", unix_s_sock_open, 1); - rb_define_method(cUNIXsocket, "path", unix_path, 0); - rb_define_method(cUNIXsocket, "addr", unix_addr, 0); - rb_define_method(cUNIXsocket, "peeraddr", unix_peeraddr, 0); - rb_define_method(cUNIXsocket, "recvfrom", unix_recvfrom, -1); - - cUNIXserver = rb_define_class("UNIXserver", cUNIXsocket); - rb_define_singleton_method(cUNIXserver, "open", unix_svr_s_open, 1); - rb_define_singleton_method(cUNIXserver, "new", unix_svr_s_open, 1); - rb_define_method(cUNIXserver, "accept", unix_accept, 0); -#endif - - cSocket = rb_define_class("Socket", cBasicSocket); - rb_define_singleton_method(cSocket, "open", sock_s_open, 3); - rb_define_singleton_method(cSocket, "new", sock_s_open, 3); - rb_define_singleton_method(cSocket, "for_fd", sock_s_for_fd, 1); - - rb_define_method(cSocket, "connect", sock_connect, 1); - rb_define_method(cSocket, "bind", sock_bind, 1); - rb_define_method(cSocket, "listen", sock_listen, 1); - rb_define_method(cSocket, "accept", sock_accept, 0); - - rb_define_method(cSocket, "recvfrom", sock_recvfrom, -1); - - rb_define_singleton_method(cSocket, "socketpair", sock_s_socketpair, 3); - rb_define_singleton_method(cSocket, "pair", sock_s_socketpair, 3); - rb_define_singleton_method(cSocket, "gethostname", sock_gethostname, 0); - rb_define_singleton_method(cSocket, "gethostbyname", sock_s_gethostbyname, 1); - rb_define_singleton_method(cSocket, "gethostbyaddr", sock_s_gethostbyaddr, -1); - rb_define_singleton_method(cSocket, "getservbyname", sock_s_getservbyaname, -1); + rb_cUNIXsocket = rb_define_class("UNIXsocket", rb_cBasicSocket); + rb_define_singleton_method(rb_cUNIXsocket, "open", unix_s_sock_open, 1); + rb_define_singleton_method(rb_cUNIXsocket, "new", unix_s_sock_open, 1); + rb_define_method(rb_cUNIXsocket, "path", unix_path, 0); + rb_define_method(rb_cUNIXsocket, "addr", unix_addr, 0); + rb_define_method(rb_cUNIXsocket, "peeraddr", unix_peeraddr, 0); + rb_define_method(rb_cUNIXsocket, "recvfrom", unix_recvfrom, -1); + + rb_cUNIXserver = rb_define_class("UNIXserver", rb_cUNIXsocket); + rb_define_singleton_method(rb_cUNIXserver, "open", unix_svr_s_open, 1); + rb_define_singleton_method(rb_cUNIXserver, "new", unix_svr_s_open, 1); + rb_define_method(rb_cUNIXserver, "accept", unix_accept, 0); +#endif + + rb_cSocket = rb_define_class("Socket", rb_cBasicSocket); + rb_define_singleton_method(rb_cSocket, "open", sock_s_open, 3); + rb_define_singleton_method(rb_cSocket, "new", sock_s_open, 3); + rb_define_singleton_method(rb_cSocket, "for_fd", sock_s_for_fd, 1); + + rb_define_method(rb_cSocket, "connect", sock_connect, 1); + rb_define_method(rb_cSocket, "bind", sock_bind, 1); + rb_define_method(rb_cSocket, "listen", sock_listen, 1); + rb_define_method(rb_cSocket, "accept", sock_accept, 0); + + rb_define_method(rb_cSocket, "recvfrom", sock_recvfrom, -1); + + rb_define_singleton_method(rb_cSocket, "socketpair", sock_s_socketpair, 3); + rb_define_singleton_method(rb_cSocket, "pair", sock_s_socketpair, 3); + rb_define_singleton_method(rb_cSocket, "gethostname", sock_gethostname, 0); + rb_define_singleton_method(rb_cSocket, "gethostbyname", sock_s_gethostbyname, 1); + rb_define_singleton_method(rb_cSocket, "gethostbyaddr", sock_s_gethostbyaddr, -1); + rb_define_singleton_method(rb_cSocket, "getservbyname", sock_s_getservbyaname, -1); /* constants */ - mConst = rb_define_module_under(cSocket, "Constants"); - sock_define_const("SOCK_STREAM", SOCK_STREAM); - sock_define_const("SOCK_DGRAM", SOCK_DGRAM); + mConst = rb_define_module_under(rb_cSocket, "Constants"); + sock_rb_define_const("SOCK_STREAM", SOCK_STREAM); + sock_rb_define_const("SOCK_DGRAM", SOCK_DGRAM); #ifdef SOCK_RAW - sock_define_const("SOCK_RAW", SOCK_RAW); + sock_rb_define_const("SOCK_RAW", SOCK_RAW); #endif #ifdef SOCK_RDM - sock_define_const("SOCK_RDM", SOCK_RDM); + sock_rb_define_const("SOCK_RDM", SOCK_RDM); #endif #ifdef SOCK_SEQPACKET - sock_define_const("SOCK_SEQPACKET", SOCK_SEQPACKET); + sock_rb_define_const("SOCK_SEQPACKET", SOCK_SEQPACKET); #endif #ifdef SOCK_PACKET - sock_define_const("SOCK_PACKET", SOCK_PACKET); + sock_rb_define_const("SOCK_PACKET", SOCK_PACKET); #endif - sock_define_const("AF_INET", AF_INET); + sock_rb_define_const("AF_INET", AF_INET); #ifdef PF_INET - sock_define_const("PF_INET", PF_INET); + sock_rb_define_const("PF_INET", PF_INET); #endif #ifdef AF_UNIX - sock_define_const("AF_UNIX", AF_UNIX); - sock_define_const("PF_UNIX", PF_UNIX); + sock_rb_define_const("AF_UNIX", AF_UNIX); + sock_rb_define_const("PF_UNIX", PF_UNIX); #endif #ifdef AF_AX25 - sock_define_const("AF_AX25", AF_AX25); - sock_define_const("PF_AX25", PF_AX25); + sock_rb_define_const("AF_AX25", AF_AX25); + sock_rb_define_const("PF_AX25", PF_AX25); #endif #ifdef AF_IPX - sock_define_const("AF_IPX", AF_IPX); - sock_define_const("PF_IPX", PF_IPX); + sock_rb_define_const("AF_IPX", AF_IPX); + sock_rb_define_const("PF_IPX", PF_IPX); #endif #ifdef AF_APPLETALK - sock_define_const("AF_APPLETALK", AF_APPLETALK); - sock_define_const("PF_APPLETALK", PF_APPLETALK); + sock_rb_define_const("AF_APPLETALK", AF_APPLETALK); + sock_rb_define_const("PF_APPLETALK", PF_APPLETALK); #endif - sock_define_const("MSG_OOB", MSG_OOB); + sock_rb_define_const("MSG_OOB", MSG_OOB); #ifdef MSG_PEEK - sock_define_const("MSG_PEEK", MSG_PEEK); + sock_rb_define_const("MSG_PEEK", MSG_PEEK); #endif #ifdef MSG_DONTROUTE - sock_define_const("MSG_DONTROUTE", MSG_DONTROUTE); + sock_rb_define_const("MSG_DONTROUTE", MSG_DONTROUTE); #endif - sock_define_const("SOL_SOCKET", SOL_SOCKET); + sock_rb_define_const("SOL_SOCKET", SOL_SOCKET); #ifdef SOL_IP - sock_define_const("SOL_IP", SOL_IP); + sock_rb_define_const("SOL_IP", SOL_IP); #endif #ifdef SOL_IPX - sock_define_const("SOL_IPX", SOL_IPX); + sock_rb_define_const("SOL_IPX", SOL_IPX); #endif #ifdef SOL_AX25 - sock_define_const("SOL_AX25", SOL_AX25); + sock_rb_define_const("SOL_AX25", SOL_AX25); #endif #ifdef SOL_ATALK - sock_define_const("SOL_ATALK", SOL_ATALK); + sock_rb_define_const("SOL_ATALK", SOL_ATALK); #endif #ifdef SOL_TCP - sock_define_const("SOL_TCP", SOL_TCP); + sock_rb_define_const("SOL_TCP", SOL_TCP); #endif #ifdef SOL_UDP - sock_define_const("SOL_UDP", SOL_UDP); + sock_rb_define_const("SOL_UDP", SOL_UDP); #endif #ifdef SO_DEBUG - sock_define_const("SO_DEBUG", SO_DEBUG); + sock_rb_define_const("SO_DEBUG", SO_DEBUG); #endif - sock_define_const("SO_REUSEADDR", SO_REUSEADDR); + sock_rb_define_const("SO_REUSEADDR", SO_REUSEADDR); #ifdef SO_TYPE - sock_define_const("SO_TYPE", SO_TYPE); + sock_rb_define_const("SO_TYPE", SO_TYPE); #endif #ifdef SO_ERROR - sock_define_const("SO_ERROR", SO_ERROR); + sock_rb_define_const("SO_ERROR", SO_ERROR); #endif #ifdef SO_DONTROUTE - sock_define_const("SO_DONTROUTE", SO_DONTROUTE); + sock_rb_define_const("SO_DONTROUTE", SO_DONTROUTE); #endif #ifdef SO_BROADCAST - sock_define_const("SO_BROADCAST", SO_BROADCAST); + sock_rb_define_const("SO_BROADCAST", SO_BROADCAST); #endif #ifdef SO_SNDBUF - sock_define_const("SO_SNDBUF", SO_SNDBUF); + sock_rb_define_const("SO_SNDBUF", SO_SNDBUF); #endif #ifdef SO_RCVBUF - sock_define_const("SO_RCVBUF", SO_RCVBUF); + sock_rb_define_const("SO_RCVBUF", SO_RCVBUF); #endif #ifdef SO_KEEPALIVE - sock_define_const("SO_KEEPALIVE", SO_KEEPALIVE); + sock_rb_define_const("SO_KEEPALIVE", SO_KEEPALIVE); #endif #ifdef SO_OOBINLINE - sock_define_const("SO_OOBINLINE", SO_OOBINLINE); + sock_rb_define_const("SO_OOBINLINE", SO_OOBINLINE); #endif #ifdef SO_NO_CHECK - sock_define_const("SO_NO_CHECK", SO_NO_CHECK); + sock_rb_define_const("SO_NO_CHECK", SO_NO_CHECK); #endif #ifdef SO_PRIORITY - sock_define_const("SO_PRIORITY", SO_PRIORITY); + sock_rb_define_const("SO_PRIORITY", SO_PRIORITY); #endif #ifdef SO_LINGER - sock_define_const("SO_LINGER", SO_LINGER); + sock_rb_define_const("SO_LINGER", SO_LINGER); #endif #ifdef SOPRI_INTERACTIVE - sock_define_const("SOPRI_INTERACTIVE", SOPRI_INTERACTIVE); + sock_rb_define_const("SOPRI_INTERACTIVE", SOPRI_INTERACTIVE); #endif #ifdef SOPRI_NORMAL - sock_define_const("SOPRI_NORMAL", SOPRI_NORMAL); + sock_rb_define_const("SOPRI_NORMAL", SOPRI_NORMAL); #endif #ifdef SOPRI_BACKGROUND - sock_define_const("SOPRI_BACKGROUND", SOPRI_BACKGROUND); + sock_rb_define_const("SOPRI_BACKGROUND", SOPRI_BACKGROUND); #endif #ifdef IP_MULTICAST_IF - sock_define_const("IP_MULTICAST_IF", IP_MULTICAST_IF); + sock_rb_define_const("IP_MULTICAST_IF", IP_MULTICAST_IF); #endif #ifdef IP_MULTICAST_TTL - sock_define_const("IP_MULTICAST_TTL", IP_MULTICAST_TTL); + sock_rb_define_const("IP_MULTICAST_TTL", IP_MULTICAST_TTL); #endif #ifdef IP_MULTICAST_LOOP - sock_define_const("IP_MULTICAST_LOOP", IP_MULTICAST_LOOP); + sock_rb_define_const("IP_MULTICAST_LOOP", IP_MULTICAST_LOOP); #endif #ifdef IP_ADD_MEMBERSHIP - sock_define_const("IP_ADD_MEMBERSHIP", IP_ADD_MEMBERSHIP); + sock_rb_define_const("IP_ADD_MEMBERSHIP", IP_ADD_MEMBERSHIP); #endif #ifdef IP_DEFAULT_MULTICAST_TTL - sock_define_const("IP_DEFAULT_MULTICAST_TTL", IP_DEFAULT_MULTICAST_TTL); + sock_rb_define_const("IP_DEFAULT_MULTICAST_TTL", IP_DEFAULT_MULTICAST_TTL); #endif #ifdef IP_DEFAULT_MULTICAST_LOOP - sock_define_const("IP_DEFAULT_MULTICAST_LOOP", IP_DEFAULT_MULTICAST_LOOP); + sock_rb_define_const("IP_DEFAULT_MULTICAST_LOOP", IP_DEFAULT_MULTICAST_LOOP); #endif #ifdef IP_MAX_MEMBERSHIPS - sock_define_const("IP_MAX_MEMBERSHIPS", IP_MAX_MEMBERSHIPS); + sock_rb_define_const("IP_MAX_MEMBERSHIPS", IP_MAX_MEMBERSHIPS); #endif #ifdef IPX_TYPE - sock_define_const("IPX_TYPE", IPX_TYPE); + sock_rb_define_const("IPX_TYPE", IPX_TYPE); #endif #ifdef TCP_NODELAY - sock_define_const("TCP_NODELAY", TCP_NODELAY); + sock_rb_define_const("TCP_NODELAY", TCP_NODELAY); #endif #ifdef TCP_MAXSEG - sock_define_const("TCP_MAXSEG", TCP_MAXSEG); + sock_rb_define_const("TCP_MAXSEG", TCP_MAXSEG); #endif } diff --git a/ext/tcltklib/tcltklib.c b/ext/tcltklib/tcltklib.c index 5948c8f5b0..b3ff66ea3f 100644 --- a/ext/tcltklib/tcltklib.c +++ b/ext/tcltklib/tcltklib.c @@ -16,10 +16,10 @@ # include <Quickdraw.h> #endif -/* for debug */ +/* for rb_debug */ -#define DUMP1(ARG1) if (debug) { fprintf(stderr, "tcltklib: %s\n", ARG1);} -#define DUMP2(ARG1, ARG2) if (debug) { fprintf(stderr, "tcltklib: ");\ +#define DUMP1(ARG1) if (rb_debug) { fprintf(stderr, "tcltklib: %s\n", ARG1);} +#define DUMP2(ARG1, ARG2) if (rb_debug) { fprintf(stderr, "tcltklib: ");\ fprintf(stderr, ARG1, ARG2); fprintf(stderr, "\n"); } /* #define DUMP1(ARG1) @@ -56,7 +56,7 @@ void _timer_for_tcl (ClientData clientData) timer->flag = 0; CHECK_INTS; #ifdef THREAD - if (!thread_critical) thread_schedule(); + if (!rb_thread_critical) rb_thread_schedule(); #endif timer->token = Tk_CreateTimerHandler(200, _timer_for_tcl, @@ -121,7 +121,7 @@ ip_ruby(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) /* ruby command has 1 arg. */ if (argc != 2) { - ArgError("wrong # of arguments (%d for 1)", argc); + rb_raise(rb_eArgError, "wrong # of arguments (%d for 1)", argc); } /* get C string from Tcl object */ @@ -133,10 +133,10 @@ ip_ruby(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) /* evaluate the argument string by ruby */ DUMP2("rb_eval_string(%s)", arg); - old_trapflg = trap_immediate; - trap_immediate = 0; + old_trapflg = rb_trap_immediate; + rb_trap_immediate = 0; res = rb_rescue(rb_eval_string, (VALUE)arg, ip_eval_rescue, (VALUE)&failed); - trap_immediate = old_trapflg; + rb_trap_immediate = old_trapflg; Tcl_ResetResult(interp); if (failed) { @@ -192,11 +192,11 @@ ip_new(VALUE self) /* from Tcl_AppInit() */ DUMP1("Tcl_Init"); if (Tcl_Init(ptr->ip) == TCL_ERROR) { - Fail("Tcl_Init"); + rb_raise(rb_eRuntimeError, "Tcl_Init"); } DUMP1("Tk_Init"); if (Tk_Init(ptr->ip) == TCL_ERROR) { - Fail("Tk_Init"); + rb_raise(rb_eRuntimeError, "Tk_Init"); } DUMP1("Tcl_StaticPackage(\"Tk\")"); Tcl_StaticPackage(ptr->ip, "Tk", Tk_Init, @@ -234,12 +234,12 @@ ip_eval(VALUE self, VALUE str) DUMP2("Tcl_Eval(%s)", buf); ptr->return_value = Tcl_Eval(ptr->ip, buf); if (ptr->return_value == TCL_ERROR) { - Fail(ptr->ip->result); + rb_raise(rb_eRuntimeError, ptr->ip->result); } DUMP2("(TCL_Eval result) %d", ptr->return_value); /* pass back the result (as string) */ - return(str_new2(ptr->ip->result)); + return(rb_str_new2(ptr->ip->result)); } @@ -271,7 +271,7 @@ ip_toUTF8(VALUE self, VALUE str, VALUE encodename) Tcl_FreeEncoding(encoding); Tcl_DStringFree(&dstr); - return str_new2(buff2); + return rb_str_new2(buff2); #endif } @@ -303,7 +303,7 @@ ip_fromUTF8(VALUE self, VALUE str, VALUE encodename) Tcl_FreeEncoding(encoding); Tcl_DStringFree(&dstr); - return str_new2(buff2); + return rb_str_new2(buff2); #endif } @@ -330,7 +330,7 @@ ip_invoke(int argc, VALUE *argv, VALUE obj) /* map from the command name to a C procedure */ if (!Tcl_GetCommandInfo(ptr->ip, cmd, &info)) { - NameError("invalid command name `%s'", cmd); + rb_raise(rb_eNameError, "invalid command name `%s'", cmd); } #if TCL_MAJOR_VERSION >= 8 object = info.isNativeObjectProc; @@ -379,11 +379,11 @@ ip_invoke(int argc, VALUE *argv, VALUE obj) } if (ptr->return_value == TCL_ERROR) { - Fail(ptr->ip->result); + rb_raise(rb_eRuntimeError, ptr->ip->result); } /* pass back the result (as string) */ - return(str_new2(ptr->ip->result)); + return(rb_str_new2(ptr->ip->result)); } /* get return code from Tcl_Eval() */ @@ -413,10 +413,10 @@ void Init_tcltklib() extern VALUE rb_argv0; /* the argv[0] */ VALUE lib = rb_define_module("TclTkLib"); - VALUE ip = rb_define_class("TclTkIp", cObject); + VALUE ip = rb_define_class("TclTkIp", rb_cObject); - eTkCallbackBreak = rb_define_class("TkCallbackBreak", eStandardError); - eTkCallbackContinue = rb_define_class("TkCallbackContinue",eStandardError); + eTkCallbackBreak = rb_define_class("TkCallbackBreak", rb_eStandardError); + eTkCallbackContinue = rb_define_class("TkCallbackContinue",rb_eStandardError); rb_define_module_function(lib, "mainloop", lib_mainloop, 0); diff --git a/ext/tkutil/tkutil.c b/ext/tkutil/tkutil.c index 58a382a41b..46f3b0f4e5 100644 --- a/ext/tkutil/tkutil.c +++ b/ext/tkutil/tkutil.c @@ -22,24 +22,8 @@ tk_eval_cmd(argc, argv) } static VALUE -tk_s_new(argc, argv, class) - int argc; - VALUE *argv; - VALUE class; -{ - VALUE obj = obj_alloc(class); - - rb_funcall2(obj, rb_intern("initialize"), argc, argv); - if (iterator_p()) rb_yield_0(obj, obj); - return obj; -} - Init_tkutil() { VALUE mTK = rb_define_module("TkUtil"); - VALUE cTK = rb_define_class("TkKernel", cObject); - rb_define_singleton_method(mTK, "eval_cmd", tk_eval_cmd, -1); - - rb_define_singleton_method(cTK, "new", tk_s_new, -1); } |