My program (aeditor) works ok on my setup (ruby-1.8.1, linux). However when installing on another box (ruby-1.8.2, linux), then the following crash happens. [shevegen] I, [2005-01-23T18:10:35.392024 #3970] INFO -- : program begin. [shevegen] F, [2005-01-23T18:10:35.420153 #3970] FATAL -- : uncaught exception occured [shevegen] DL::DLTypeError unexpected type 'N' [shevegen] struct.rb | 114 | in `sizeof' [shevegen] struct.rb | 114 | in `parse' [shevegen] struct.rb | 74 | in `initialize' [shevegen] struct.rb | 11 | in `new' [shevegen] struct.rb | 11 | in `struct' [shevegen] ncursesw.rb | 74 | [shevegen] main_tui.rb | 46 | in `require' [shevegen] main_tui.rb | 46 | in `run' [shevegen] main_tui.rb | 358 | [shevegen] I, [2005-01-23T18:10:35.420424 #3970] INFO -- : program end. The wrapper code goes like this: require 'dl/import' require 'dl/struct' module Curses extend DL::Importable dlload 'libncursesw.so' typealias 'NCURSES_SIZE_T', 'short' typealias 'chtype', 'unsigned long' typealias 'attr_t', 'chtype' typealias 'bool', 'int' WINDOW = struct [ # current cursor position 'NCURSES_SIZE_T cury', 'NCURSES_SIZE_T curx', # window location and size # maximums of x and y, NOT window size 'NCURSES_SIZE_T maxy', 'NCURSES_SIZE_T maxx', # screen coords of upper-left-hand corner 'NCURSES_SIZE_T begy', 'NCURSES_SIZE_T begx', # window state flags 'short flags', # attribute tracking 'attr_t attrs', # current attribute for non-space character 'chtype bkgd', # current background char/attribute pair # option values set by user 'bool notimeout', # no time out on function-key entry? 'bool clear', # consider all data in the window invalid? 'bool leaveok', # OK to not reset cursor on exit? 'bool scroll', # OK to scroll this window? 'bool idlok', # OK to use insert/delete line? 'bool idcok', # OK to use insert/delete char? 'bool immed', # window in immed mode? (not yet used) 'bool sync', # window in sync mode? 'bool use_keypad', # process function keys into KEY_ symbols? 'int delay', # 0 = nodelay, <0 = blocking, >0 = delay # the actual line data 'void *line', # TODO: ldat is used.. but what is ldat? # global screen state 'NCURSES_SIZE_T regtop', # top line of scrolling region 'NCURSES_SIZE_T regbottom', # bottom line of scrolling region # these are used only if this is a sub-window 'int parx', # x coordinate of this window in parent 'int pary', # y coordinate of this window in parent # pointer to parent if a sub-window 'void *parent', # TODO: this is a struct window * pointer # these are used only if this is a pad 'NCURSES_SIZE_T pad_y', 'NCURSES_SIZE_T pad_x', 'NCURSES_SIZE_T pad_top', 'NCURSES_SIZE_T pad_left', 'NCURSES_SIZE_T pad_bottom', 'NCURSES_SIZE_T pad_right', # real begy is _begy + _yoffset 'NCURSES_SIZE_T yoffset' ] # setup extern 'void *initscr()' extern 'int cbreak()' extern 'int keypad(void *, bool)' extern 'int noecho()' extern 'int nonl()' extern 'int raw()' extern 'int meta(void *, bool)' extern 'int nodelay(void *, bool)' extern 'int keyok(int, bool)' extern 'bool has_colors()' extern 'int start_color()' extern 'int init_pair(short, short, short)' extern 'int wcolor_set(void*, short, void*)' extern 'void wbkgdset(void *, chtype)' extern 'int wattrset(void *, int)' def self.has_colors? (has_colors != 0) end # access global variables Int = struct ["int value"] COLORS_PTR = symbol 'COLORS' ESCDELAY_PTR = symbol 'ESCDELAY' def self.COLORS Int.new(COLORS_PTR).value end def self.ESCDELAY Int.new(ESCDELAY_PTR).value end # teardown extern 'int endwin()' # runtime extern 'int clear()' extern 'int addstr(const char *)' #extern 'int add_wch(const cchar_t *)' extern 'int getch()' extern 'int refresh()' extern 'int clrtoeol()' extern 'int addnstr(const char *, int)' extern 'int move(int, int)' extern 'int refresh()' end I cannot figure out what the problem seems to be? Maybe something is different in 1.8.2 ? (maybe I should upgrade to 1.8.2) -- Simon Strandgaard