[ruby-dl] unexpected type 'N'

S

Simon Strandgaard

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)
 
F

Florian Gross

Simon said:
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

I think I've been experiencing similar trouble with evil-ruby. I thought
it was just me and that it didn't work for some time, but now we know
that it was introduced only recently.
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'

typealias 'NCURSES_SIZE_T', nil, nil, nil, 'short'
typealias 'chtype', nil, nil, nil, 'unsigned long'
typealias 'attr_t', nil, nil, nil, 'chtype'
typealias 'bool', nil, nil, nil, 'int'
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)

I'm not sure if this change was accidental or on purpose. It might be a
bug that was introduced in 1.8.2. Maybe Takaaki Tateishi could respond
on this?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,038
Messages
2,570,374
Members
47,020
Latest member
anuradha

Latest Threads

Top