Get and set terminal size

2014-04-19 Thread Denis Mezhov via Digitalmars-d-learn

I want use tgetnum for get terminal size
http://www.mkssoftware.com/docs/man3/curs_termcap.3.asp

extern(C):
int tgetnum(const(char) *capname);

calling a method from main
writeln(tgetnum(toStringz("li")));


I receive an error message
Undefined symbols for architecture x86_64:
  "_tgetnum", referenced from:
  _main in RSConsole.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to 
see invocation)



Does anyone know what the problem is?
Maybe there are other methods to get and set sizes of the Mac OS 
X console?


Re: Get and set terminal size

2014-04-19 Thread Adam D. Ruppe via Digitalmars-d-learn
Try adding -lncurses or -lcurses to the command line. tgetnum is 
found in the curses library which isn't linked in automatically 
by default.


Re: Get and set terminal size

2014-04-19 Thread Denis Mezhov via Digitalmars-d-learn

On Saturday, 19 April 2014 at 09:59:39 UTC, Adam D. Ruppe wrote:
Try adding -lncurses or -lcurses to the command line. tgetnum 
is found in the curses library which isn't linked in 
automatically by default.



Error: unrecognized switch '-lcurses'
Error: unrecognized switch '-lncurses'

:((



Re: Get and set terminal size

2014-04-19 Thread Adam D. Ruppe via Digitalmars-d-learn

Blargh, I don't know teh ldc switch for it :(

Try adding pragma(lib, "curses"); (or ncurses) to your file with 
main in it, i think ldc supports that.


Re: Get and set terminal size

2014-04-19 Thread Denis Mezhov via Digitalmars-d-learn

On Saturday, 19 April 2014 at 10:39:43 UTC, Adam D. Ruppe wrote:

Blargh, I don't know teh ldc switch for it :(

Try adding pragma(lib, "curses"); (or ncurses) to your file 
with main in it, i think ldc supports that.






pragma(lib, "curses");

extern(C):
int tgetnum(const(char) *capname);

hmm segfault error :(
Segmentation fault: 11


Re: Get and set terminal size

2014-04-19 Thread FreeSlave via Digitalmars-d-learn
What are compiler and platform do you use? Probably you are 
trying to link with 64-bit library while being on 32-bit OS (or 
vice versa)

It works fine on my 32-bit Debian with ldc2 and dmd.


Re: Get and set terminal size

2014-04-19 Thread FreeSlave via Digitalmars-d-learn

I use
ldc2 main.d -L-lcurses
or
dmd main.d -L-lcurses

and following source code:

import std.stdio;

extern(C) int tgetnum(const(char) *id);

int main()
{
writeln(tgetnum("li"));
return 0;
}

Note that you don't need to apply toStringz to string literals 
since they implicitly cast to const char*.


Re: Get and set terminal size

2014-04-19 Thread Mike Parker via Digitalmars-d-learn

On 4/19/2014 9:06 PM, FreeSlave wrote:


Note that you don't need to apply toStringz to string literals since
they implicitly cast to const char*.


And, more importantly, are nul terminated.


Re: Get and set terminal size

2014-04-20 Thread Denis Mezhov via Digitalmars-d-learn

On Saturday, 19 April 2014 at 12:06:58 UTC, FreeSlave wrote:

I use
ldc2 main.d -L-lcurses
or
dmd main.d -L-lcurses

and following source code:

import std.stdio;

extern(C) int tgetnum(const(char) *id);

int main()
{
writeln(tgetnum("li"));
return 0;
}

Note that you don't need to apply toStringz to string literals 
since they implicitly cast to const char*.


It's work) Thanks.