[Gambas-user] ncurses - macro is not found
Benoît Minisini
gambas at ...1...
Fri Mar 4 01:01:21 CET 2011
> Am 02.03.2011 21:21, schrieb Benoît Minisini:
> >> I do not have that much idea of how that works under C, so that's why I
> >> ask here.
> >>
> >> In the ncurses library, there are macros. One of them is needed to get
> >> the dimensions of the "window". But when I define it
> >>
> >> EXTERN getmaxyx(...
> >>
> >> when my program starts, there is merely the error "cannot find symbol
> >> getmaxyx in library ncurses".
> >>
> >> So what can I do here?
> >>
> >> Regards
> >> Rolf
> >
> > A macro is not a function. It is some code replaced by some other code at
> > compilation time. The "getmaxyx" identifier does not exist in the
> > executable.
> >
> > You must read the C header file to see what the getmaxyx() macro actually
> > does.
> >
> > The gcc compiler has the "-E" option that can help you, by writing to the
> > standard output the real code that will be compiled once all macros have
> > been expanded.
> >
> > Regards,
>
> Thanks for the tip. I am aware of what a macro in general does, but I do
> not understand the result of this thing:
>
> getmaxyx(stdscr, y, x);
>
> becomes
>
> (y = ((stdscr)?((stdscr)->_maxy + 1):(-1)), x =
> ((stdscr)?((stdscr)->_maxx + 1):(-1)));
>
> and I do not know what "?", "->" and ":" are good for... I guess, the
> basic functions are called maxy and maxx, but why with "_" etc...?
"x ? y : z" is an expression that returns "z" if "x" is zero, and returns "y"
otherwise.
(stdscr)->_maxy is the value of the "_maxy" field of the structure pointed by
stdscr.
So you must declare a structure equivalent to what stdscr points at, to be
able to access its _maxy field, as that macro does.
Of course, a ncurses component written in C would be simpler!
Regards,
--
Benoît Minisini
More information about the User
mailing list