www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - isatty and Pavel stream.d

reply "carlos smith" <carlos-smith sympatico.ca> writes:
Hi!,

What's the equivalent of the C isatty() in D?
I grepped isatty in all sources files and did not
find it.

Also, i would like to know if anyone compiled the
Pavel's stream.d library with a recent V1 D compiler.

This library seems to allow reading utf-8 from 
a windows console.

With dmd 1.043, it's very easy to write utf string 
to console. But, how do we readln from the console ?

Thanks...
May 01 2009
parent reply Jarrett Billingsley <jarrett.billingsley gmail.com> writes:
On Fri, May 1, 2009 at 10:41 AM, carlos smith <carlos-smith sympatico.ca> wrote:
 Hi!,

 What's the equivalent of the C isatty() in D?
 I grepped isatty in all sources files and did not
 find it.
isatty(). You can use any C function from D. Phobos does not have a terribly good set of Posix headers, so you'll have to declare it yourself: extern(C) int isatty(int); And you should be able to use it. You shouldn't get any linking errors, at least I don't think.
 Also, i would like to know if anyone compiled the
 Pavel's stream.d library with a recent V1 D compiler.
You mean std.stream? That's been part of Phobos .. well, forever. At least 5 years anyway.
 This library seems to allow reading utf-8 from a windows console.

 With dmd 1.043, it's very easy to write utf string to console. But, how do
 we readln from the console ?
std.stdio.readln.
May 01 2009
parent reply "Carlos Smith" <carlos-smith sympatico.ca> writes:
"Jarrett Billingsley" <jarrett.billingsley gmail.com> a écrit dans le 
message de >
 extern(C) int isatty(int);

 And you should be able to use it.  You shouldn't get any linking
 errors, at least I don't think.
It worked fine.no link error. isatty is sometimes used like this: isatty(fileno(fp)) So i used fileno(), whis is declared in std.c.stdio. but i got a linking error: _fileno not found. I tried two other function in std.c.stdio to see if this was causes by some other factor i am not awared of. clearerr() and rewind() works just fine. So may be there is a problem with fileno() ??
 You mean std.stream?  That's been part of Phobos .. well, forever. 
 At
 least 5 years anyway.
No, i mean the stream.d that comes in stream.zip from the Pavel's site: http://int19h.tamb.ru/files/stream.zip His stream library seems different. as, it have functions to read Unicode strings from the console. I tried to compile it with dmd 1.043 but there are many errors.
 This library seems to allow reading utf-8 from a windows console.

 With dmd 1.043, it's very easy to write utf string to console. But, 
 how do
 we readln from the console ?
 std.stdio.readln
I know that function. But it allows to read char[] arrays only. (if i read well the declarations). How do i read wchar[] arrays from the console with it ? As i said, it's real easy to write unicode strings to the console. But, it seems a lot less easier to read unicode from the console. Am i right ?
May 01 2009
next sibling parent Jarrett Billingsley <jarrett.billingsley gmail.com> writes:
On Fri, May 1, 2009 at 11:52 AM, Carlos Smith <carlos-smith sympatico.ca> w=
rote:

 So may be there is a problem with fileno() ??
I have no idea.
 You mean std.stream? =A0That's been part of Phobos .. well, forever. At
 least 5 years anyway.
No, i mean the stream.d that comes in stream.zip from the Pavel's site: http://int19h.tamb.ru/files/stream.zip His stream library seems different. as, it have functions to read Unicode strings from the console. I tried to compile it with dmd 1.043 but there are many errors.
std.stream *is* Pavel's code. That zip is absolutely ancient. It's no surprise it doesn't compile.
 I know that function. But it allows to read
 char[] arrays only. (if i read well the declarations).
Sure, but char[] IS Unicode! It's just UTF-8.
 How do i read wchar[] arrays from the console with it ?
Use std.cstream.din.readLineW() if you want a wchar[] so badly.
May 01 2009
prev sibling parent Georg Wrede <georg.wrede iki.fi> writes:
Carlos Smith wrote:
 
 "Jarrett Billingsley" <jarrett.billingsley gmail.com> a écrit dans le 
 message de >
 extern(C) int isatty(int);

 And you should be able to use it.  You shouldn't get any linking
 errors, at least I don't think.
It worked fine.no link error. isatty is sometimes used like this: isatty(fileno(fp)) So i used fileno(), whis is declared in std.c.stdio. but i got a linking error: _fileno not found.
Assuming you only want to know if the program is used on a console, or if input, output, or error are redirected, then this helps: import std.stdio; extern(C) int isatty(int); void main() { writeln("input from tty is ", isatty(0)?"true":"false"); writeln("output to tty is ", isatty(1)?"true":"false"); writeln("error to tty is ", isatty(2)?"true":"false"); }
 I tried two other function in std.c.stdio to see if
 this was causes by some other factor i am not awared of.
 
 clearerr() and rewind() works just fine.
 
 So may be there is a problem with fileno() ??
 
 You mean std.stream?  That's been part of Phobos .. well, forever. At
 least 5 years anyway.
No, i mean the stream.d that comes in stream.zip from the Pavel's site: http://int19h.tamb.ru/files/stream.zip His stream library seems different. as, it have functions to read Unicode strings from the console. I tried to compile it with dmd 1.043 but there are many errors.
 This library seems to allow reading utf-8 from a windows console.

 With dmd 1.043, it's very easy to write utf string to console. But, 
 how do
 we readln from the console ?
 std.stdio.readln
I know that function. But it allows to read char[] arrays only. (if i read well the declarations). How do i read wchar[] arrays from the console with it ? As i said, it's real easy to write unicode strings to the console. But, it seems a lot less easier to read unicode from the console. Am i right ?
As posted in recent thread "How-to: input/output "Japanese Caracters", all you have to do with Unicode is simply to use readln and writeln. They have been Unicode-proof since a bunch of years back.
May 03 2009