Thread overview | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
November 19, 2004 Newbie: Standard Input? Readline? Convert to double? | ||||
---|---|---|---|---|
| ||||
Lol, now I'm struggling through figuring out standard INPUT. I have messed with scanf, stdin.readLine(), readLine()...all to no avail. If any suggestion I have...better basic documentation! This website is great, very detailed about the language, but it seems a bit short on talking about things so practical and essential as standard ways of input and output. |
November 20, 2004 Re: Newbie: Standard Input? Readline? Convert to double? | ||||
---|---|---|---|---|
| ||||
Posted in reply to matthew_hurne | In article <cnm116$1bns$1@digitaldaemon.com>, matthew_hurne@yahoo.com says... > >Lol, now I'm struggling through figuring out standard INPUT. I have messed with >scanf, stdin.readLine(), readLine()...all to no avail. I've written an input package that is functionally similar to format/writef. The functions are called readf, and are functionally similar to writef in Phobos. You can download it here: http://home.f4.ca/sean/d/stdio.zip The final release is waiting on some compiler fixes, but the current version is feature-complete and, as far as I know, bug free. Sean |
November 20, 2004 Re: Newbie: Standard Input? Readline? Convert to double? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean Kelly | In article <cnm2ek$1dpn$1@digitaldaemon.com>, Sean Kelly says... > >In article <cnm116$1bns$1@digitaldaemon.com>, matthew_hurne@yahoo.com says... >> >>Lol, now I'm struggling through figuring out standard INPUT. I have messed with >>scanf, stdin.readLine(), readLine()...all to no avail. > >I've written an input package that is functionally similar to format/writef. The functions are called readf, and are functionally similar to writef in Phobos. You can download it here: > >http://home.f4.ca/sean/d/stdio.zip > >The final release is waiting on some compiler fixes, but the current version is >feature-complete and, as far as I know, bug free. >Sean > > Sean, I'm getting the following error: stdio.d(101): undefined identifier WEOF If I change WEOF in that line to EOF, I get the following: /usr/bin/ld: Warning: size of symbol `_D3std6stdarg9va_arg_Aa6va_argFKPvZAa' changed from 23 in stdio.o to 34 in /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../libphobos.a(format.o) /usr/bin/ld: Warning: size of symbol `_D3std6stdarg9va_arg_Au6va_argFKPvZAu' changed from 23 in stdio.o to 19 in /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../libphobos.a(format.o) /usr/bin/ld: Warning: size of symbol `_D3std6stdarg9va_arg_Aw6va_argFKPvZAw' changed from 38 in stdio.o to 19 in /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../libphobos.a(format.o) |
November 20, 2004 Re: Newbie: Standard Input? Readline? Convert to double? | ||||
---|---|---|---|---|
| ||||
Posted in reply to matthew_hurne |
matthew_hurne@yahoo.com schrieb am Sat, 20 Nov 2004 20:02:57 +0000 (UTC):
>>>Lol, now I'm struggling through figuring out standard INPUT. I have messed with
>>>scanf, stdin.readLine(), readLine()...all to no avail.
>>
>>I've written an input package that is functionally similar to format/writef. The functions are called readf, and are functionally similar to writef in Phobos. You can download it here:
>>
>>http://home.f4.ca/sean/d/stdio.zip
>>
>>The final release is waiting on some compiler fixes, but the current version is
>>feature-complete and, as far as I know, bug free.
>>Sean
>>
>>
>
>
> Sean,
> I'm getting the following error:
>
> stdio.d(101): undefined identifier WEOF
>
> If I change WEOF in that line to EOF, I get the following:
>
> /usr/bin/ld: Warning: size of symbol `_D3std6stdarg9va_arg_Aa6va_argFKPvZAa' changed from 23 in stdio.o to 34 in /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../libphobos.a(format.o) /usr/bin/ld: Warning: size of symbol `_D3std6stdarg9va_arg_Au6va_argFKPvZAu' changed from 23 in stdio.o to 19 in /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../libphobos.a(format.o) /usr/bin/ld: Warning: size of symbol `_D3std6stdarg9va_arg_Aw6va_argFKPvZAw' changed from 38 in stdio.o to 19 in /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../libphobos.a(format.o)
That's a Phobos bug. Below is a patch for gdc-0.8.
For dmd-0.106 you only need to apply the second part.
After rebuilding and installing Phobos the problem should be gone.
I don't know about Mac/BSD. You might have to look up "WEOF" in "wchar.h" and adapt the patch.
Thomas
--- d/phobos/std/c/stdio.d 2004-11-20 22:10:36.026884216 +0100
+++ d/phobos/std/c/stdio.d 2004-11-20 22:16:20.107576000 +0100
@@ -40,6 +40,7 @@
alias gcc.config.FILENAME_MAX FILENAME_MAX;
alias gcc.config.TMP_MAX TMP_MAX;
alias gcc.config.L_tmpnam L_tmpnam;
+ const uint WEOF = uint.max;
}
else version (linux)
{
@@ -48,6 +49,7 @@
const int FILENAME_MAX = 4095;
const int TMP_MAX = 238328;
const int L_tmpnam = 20;
+ const uint WEOF = uint.max;
}
enum { SEEK_SET, SEEK_CUR, SEEK_END }
|
November 20, 2004 Re: Newbie: Standard Input? Readline? Convert to double? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Thomas Kuehne | In article <s8p472-vj2.ln1@kuehne.cn>, Thomas Kuehne says... > > >matthew_hurne@yahoo.com schrieb am Sat, 20 Nov 2004 20:02:57 +0000 (UTC): >>>>Lol, now I'm struggling through figuring out standard INPUT. I have messed with >>>>scanf, stdin.readLine(), readLine()...all to no avail. >>> >>>I've written an input package that is functionally similar to format/writef. The functions are called readf, and are functionally similar to writef in Phobos. You can download it here: >>> >>>http://home.f4.ca/sean/d/stdio.zip >>> >>>The final release is waiting on some compiler fixes, but the current version is >>>feature-complete and, as far as I know, bug free. >>>Sean >>> >>> >> >> >> Sean, >> I'm getting the following error: >> >> stdio.d(101): undefined identifier WEOF >> >> If I change WEOF in that line to EOF, I get the following: >> >> /usr/bin/ld: Warning: size of symbol `_D3std6stdarg9va_arg_Aa6va_argFKPvZAa' changed from 23 in stdio.o to 34 in /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../libphobos.a(format.o) /usr/bin/ld: Warning: size of symbol `_D3std6stdarg9va_arg_Au6va_argFKPvZAu' changed from 23 in stdio.o to 19 in /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../libphobos.a(format.o) /usr/bin/ld: Warning: size of symbol `_D3std6stdarg9va_arg_Aw6va_argFKPvZAw' changed from 38 in stdio.o to 19 in /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../libphobos.a(format.o) > >That's a Phobos bug. Below is a patch for gdc-0.8. >For dmd-0.106 you only need to apply the second part. >After rebuilding and installing Phobos the problem should be gone. > >I don't know about Mac/BSD. You might have to look up "WEOF" in "wchar.h" and adapt the patch. > >Thomas > >--- d/phobos/std/c/stdio.d 2004-11-20 22:10:36.026884216 +0100 >+++ d/phobos/std/c/stdio.d 2004-11-20 22:16:20.107576000 +0100 >@@ -40,6 +40,7 @@ > alias gcc.config.FILENAME_MAX FILENAME_MAX; > alias gcc.config.TMP_MAX TMP_MAX; > alias gcc.config.L_tmpnam L_tmpnam; >+ const uint WEOF = uint.max; > } > else version (linux) > { >@@ -48,6 +49,7 @@ > const int FILENAME_MAX = 4095; > const int TMP_MAX = 238328; > const int L_tmpnam = 20; >+ const uint WEOF = uint.max; > } > > enum { SEEK_SET, SEEK_CUR, SEEK_END } Cool but it doesn't compile: make[1]: Entering directory `/home/matthurne/dmd/src/phobos/etc/c/recls' g++ -Wall -O4 -mcpu=i686 -DNDEBUG -DUNIX -D_M_IX86 -c -I. -I../stlsoft -orecls_fileinfo_unix.o recls_fileinfo_unix.cpp ./stlsoft/stlsoft_null.h: In function `const recls::recls_fileinfo_t* recls::FileInfo_Allocate(size_t)': ./stlsoft/stlsoft_null.h:194: error: `stlsoft::NULL_v::NULL_v(const stlsoft::NULL_v&)' is private recls_fileinfo_unix.cpp:237: error: within this context ./stlsoft/stlsoft_null.h: In function `void recls::FileInfo_Release(const recls::recls_fileinfo_t*)': ./stlsoft/stlsoft_null.h:194: error: `stlsoft::NULL_v::NULL_v(const stlsoft::NULL_v&)' is private recls_fileinfo_unix.cpp:256: error: within this context ./stlsoft/stlsoft_null.h: In function `recls::recls_rc_t recls::FileInfo_Copy(const recls::recls_fileinfo_t*, const recls::recls_fileinfo_t**)': ./stlsoft/stlsoft_null.h:194: error: `stlsoft::NULL_v::NULL_v(const stlsoft::NULL_v&)' is private recls_fileinfo_unix.cpp:277: error: within this context make[1]: *** [recls_fileinfo_unix.o] Error 1 make[1]: Leaving directory `/home/matthurne/dmd/src/phobos/etc/c/recls' make: *** [etc/c/recls/recls_fileinfo_unix.o] Error 2 |
November 20, 2004 Re: Newbie: Standard Input? Readline? Convert to double? | ||||
---|---|---|---|---|
| ||||
Posted in reply to matthew_hurne | matthew_hurne@yahoo.com schrieb am Sat, 20 Nov 2004 22:45:17 +0000 (UTC): > Cool but it doesn't compile: > > make[1]: Entering directory `/home/matthurne/dmd/src/phobos/etc/c/recls' g++ -Wall -O4 -mcpu=i686 -DNDEBUG -DUNIX -D_M_IX86 -c -I. -I../stlsoft -orecls_fileinfo_unix.o recls_fileinfo_unix.cpp ./stlsoft/stlsoft_null.h: In function `const recls::recls_fileinfo_t* [snip] 1) get the install script from http://dmd.kuehne.cn 2) create a temp dir 3) put the script and the dmd.zip into that dir 4) run the script with the option ./dmd.zip note: no need to symlink / change the PATH (suggested by the readme) 6) change to dmd/src/phobos/std/c 7) apply the changes 8) change to dmd/src/phobos 9) run make -f linux.mak 10) replace your phobos.a with the newly generated one (!keep a back) 11) try if it's working ;) Thomas |
November 20, 2004 Re: Newbie: Standard Input? Readline? Convert to double? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Thomas Kuehne | Thomas Kuehne schrieb am Sun, 21 Nov 2004 00:09:43 +0100: > 1) get the install script from http://dmd.kuehne.cn arr - I just realised that the link is botched .... http://dmd.kuehne.cn/archive.html download the 0.97 version and search for "stlsoft" Change your dmd source and do a normal phobos rebuilding/installation - and forget about the not existing script :P Thomas |
November 21, 2004 Re: Newbie: Standard Input? Readline? Convert to double? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Thomas Kuehne | In article <r50572-b64.ln1@kuehne.cn>, Thomas Kuehne says... > > >Thomas Kuehne schrieb am Sun, 21 Nov 2004 00:09:43 +0100: >> 1) get the install script from http://dmd.kuehne.cn >arr - I just realised that the link is botched .... > >http://dmd.kuehne.cn/archive.html > >download the 0.97 version and search for "stlsoft" >Change your dmd source and do a normal phobos >rebuilding/installation - and forget about the not existing script :P > >Thomas I edited dmd/src/phobos/etc/c/stlsoft/stlsoft_null.h with the following (this is what it appeared the patching would do...) Removed line 242: NULL_v(NULL_v const &); And moved it under public: I rebuilt with make -f linux.mak and copied the libphobos.a to /usr/lib, overwriting the original, ran /sbin/ldconfig, and then tried my compile again. And I got the same errors. *sigh* All this just to try to do basic input from the console? This is kinda silly... |
November 21, 2004 Re: Newbie: Standard Input? Readline? Convert to double? | ||||
---|---|---|---|---|
| ||||
Posted in reply to matthew_hurne |
matthew_hurne@yahoo.com schrieb am Sun, 21 Nov 2004 00:23:45 +0000 (UTC):
> I edited dmd/src/phobos/etc/c/stlsoft/stlsoft_null.h with the following (this is what it appeared the patching would do...)
>
> Removed line 242:
> NULL_v(NULL_v const &);
>
> And moved it under public:
>
> I rebuilt with make -f linux.mak and copied the libphobos.a to /usr/lib, overwriting the original, ran /sbin/ldconfig, and then tried my compile again. And I got the same errors.
>
> *sigh* All this just to try to do basic input from the console? This is kinda silly...
This is indeed a wierd bug.
If the content of std.stdarg is copied into the downloaded stdio package and all
imports for std.stdarg removed the test programm compiles - but doesn't
read any input.
Seems to be a compiler bug.
gdc's output:
stdio.d:48: cast(void*)(_argptr) is not an lvalue
stdio.d:50: cast(void*)(_argptr) is not an lvalue
stdio.d:52: cast(void*)(_argptr) is not an lvalue
unformat.d: In function `unFormat':
unformat.d:484: interner Compiler-Fehler: Segmentation fault
Thomas
|
November 21, 2004 Re: Newbie: Standard Input? Readline? Convert to double? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Thomas Kuehne | Thomas Kuehne wrote: > That's a Phobos bug. Below is a patch for gdc-0.8. For dmd-0.106 you only need to apply the second part. > After rebuilding and installing Phobos the problem should be gone. > > I don't know about Mac/BSD. You might have to look up "WEOF" > in "wchar.h" and adapt the patch. On Mac OS X, wint_t is a *signed* entity. (i.e. "int") But, unless I am mistaken, it should be the same as 0xFFFFFFFF ? /usr/include/wchar.h: > #ifndef _BSD_WINT_T_DEFINED_ > #define _BSD_WINT_T_DEFINED_ > typedef _BSD_WINT_T_ wint_t; > #endif > > #ifndef WEOF > #define WEOF ((wint_t)-1) > #endif and > wint_t fgetwc(struct __sFILE *); /usr/include/ppc/ansi.h: /usr/include/ppc/i386.h: > #define _BSD_WINT_T_ _BSD_CT_RUNE_T_ and > #define _BSD_CT_RUNE_T_ int /* arg type for ctype funcs */ So you can probably use "const uint WEOF = uint.max;" all over. Then again, shouldn't they have type wint_t? As in: "const wint_t WEOF = 0xFFFFFFFF;" and "extern (C) wint_t fgetwc(FILE *);" Pretending that the "wchar_t" typedef in C is the same as the wchar type in D is not true, or at least not portable? wchar_t is either wchar (on Windows), or dchar (on others) The type wint_t should be able to hold all wchar_t + WEOF. I suppose one could use the name wchar_t for it: "version (Windows) { alias wchar wchar_t; } else version (Unix) { alias dchar wchar_t; }" And then "wint_t" can just be a wchar_t alias? On some platforms, wchar_t is 32 bits while wint_t is 64 bits! But I guess that Phobos still have a few other 64 bit corners? --anders |
Copyright © 1999-2021 by the D Language Foundation