Toon posts:

[C] curs_set in ncurses

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer een programma te schrijven in ncurses onder OS X (compiler: gcc v4.x en ncurses v5.5).
Volgens de man pages moet ik curs_set(0) gebruiken om mijn cursor te verbergen maar de terminal (bash) lijkt dit te negeren.

Enig idee wat ik fout doe of hoe dit opgelost kan worden?

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 26-09 10:03

MBV

The curs_set routine sets the cursor state is set to invisible, normal,
or very visible for visibility equal to 0, 1, or 2 respectively. If
the terminal supports the visibility requested, the previous cursor
state is returned; otherwise, ERR is returned.
Wat krijg je terug? Werken de andere states wel?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Volgens de trace log returned curs_set(0) -1.
Ik vrees dat dit gelijk is aan error, maar de vraag is dan waarom?
En hoe komt dit?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit is de tracelog
TRACING NCURSES version 5.4.20041023 (tracelevel=0x20)
called {initscr()
your terminal name is vt102
cannot open terminfo /Users/jonasvanderaa/.terminfo/v/vt102 (errno=2)
read terminfo /sw/share/terminfo/v/vt102
...done reading terminfo bool 38 num 7 str 270
screen size: terminfo lines = 24 columns = 80
screen size: environment LINES = 0 COLUMNS = 0
screen size is 24x80
TABSIZE = 8
create :screen vt102 24x80
initializing ACS map
_nc_unicode_locale(US-ASCII) ->0
READ acs_chars "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~"
DIFF acs_chars "+>,<-^.v0#``aaffggh#i#jjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~"
creating newscr
_nc_makenew(24,80,0,0)
create :window 0x100590
creating curscr
_nc_makenew(24,80,0,0)
create :window 0x102500
creating stdscr
_nc_makenew(24,80,0,0)
create :window 0x104470
CatchIfDefault - will catch SIGINT
CatchIfDefault - will catch SIGTERM
return }0x104470
called {noecho()
return }0
called {cbreak()
return }0
called {nodelay(0x104470,1)
return }0
called {keypad(0x104470,1)
BEGIN tries 0x1002e0
  348: "\eOq" (KEY_A1)
  349: "\eOs" (KEY_A3)
  350: "\eOr" (KEY_B2)
  351: "\eOp" (KEY_C1)
  352: "\eOn" (KEY_C3)
  258: "\eOB" (KEY_DOWN)
  343: "\eOM" (KEY_ENTER)
  264: "\eOy" (KEY_F(0))
  265: "\eOP" (KEY_F(1))
  274: "\eOx" (KEY_F(10))
  266: "\eOQ" (KEY_F(2))
  267: "\eOR" (KEY_F(3))
  268: "\eOS" (KEY_F(4))
  269: "\eOt" (KEY_F(5))
  270: "\eOu" (KEY_F(6))
  271: "\eOv" (KEY_F(7))
  272: "\eOl" (KEY_F(8))
  273: "\eOw" (KEY_F(9))
  260: "\eOD" (KEY_LEFT)
  261: "\eOC" (KEY_RIGHT)
  259: "\eOA" (KEY_UP)
  263: "\b" (KEY_BACKSPACE)
. . . tries 0x1002e0
return }0
called {curs_set(0)
return }-1
curs ret: -1
called {wrefresh(0x104470)
return }0
called {wrefresh(0x104470)
return }0
called {has_colors()
return }0
called {newwin(5,10,1,1)
_nc_makenew(5,10,1,1)
create :window 0x106570
return }0x106570
called {wborder(0x106570,{ACS_VLINE | {A_ALTCHARSET}},{ACS_VLINE | {A_ALTCHARSET}},{ACS_HLINE | {A_ALTCHARSET}},{ACS_HLINE | {A_ALTCHARSET}},{000},{000},{000},{000})
using {ACS_VLINE | {A_ALTCHARSET}}, {ACS_VLINE | {A_ALTCHARSET}}, {ACS_HLINE | {A_ALTCHARSET}}, {ACS_HLINE | {A_ALTCHARSET}}, {ACS_ULCORNER | {A_ALTCHARSET}}, {ACS_URCORNER | {A_ALTCHARSET}}, {ACS_LLCORNER | {A_ALTCHARSET}}, {ACS_LRCORNER | {A_ALTCHARSET}}
return }0
...
called {wgetch(0x104470)
wgetch returning : 'Q' = 0121
return }81
called {wrefresh(0x104470)
return }0
called {wrefresh(0x104470)
return }0
called {wrefresh(0x106570)
return }0
called {endwin()
return }0


Wat er uit gelaten is: een hele zooi refresh en getch calls

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 26-09 10:03

MBV

Dat zeggen ze er niet bij. Wat krijg je terug als je hem met parameter 2 aanroept? En werkt het in de curses-hello-world ook niet? 't Zou kunnen zijn dat je een combinatie van aanroepen doet die niet mag.

doe jezelf een lol, en installeer een debugger. Eclipse met CDT, of KDevelop, of weet ik veel wat voor jouw OS handig is. Scheelt zoveel tijd met dit soort foutjes...

[ Voor 30% gewijzigd door MBV op 25-11-2008 17:38 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als ik 2 opgeef geeft hij ook -1 terug. Ik heb een stukje voorbeeldcode gedownload en die bleek ook hetzelfde probleem te hebben, dus het ligt niet aan een slechte combinatie van aanroepen.

Ik heb Xcode geprobeerd als IDE maar die debugger (een grafische schil rond gdb) geeft problemen met libcurses.

[ Voor 24% gewijzigd door Verwijderd op 25-11-2008 18:43 . Reden: updaten ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Update: Ik heb Apple's implementatie van X11 gebruikt en dan luistert hij wel goed.
Dit zette mij aan het denken, ik heb de terminal emulatie van Apple's eigen terminal op xterm in plaats van xterm-color te zetten en voilà, probleem opgelost *zucht* Dat zetten ze dan niet in de man pages.

Bedankt voor de steun mensen.

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 26-09 10:03

MBV

Ik was maar alleen hoor ;)

Mooi dat het gelukt is. Raar dat de debugger tegenwerkt, maar dat kan voorkomen.
Pagina: 1