digitalmars.D.learn - Can't get D calling C to build.
- Bob Cowdery (19/19) Aug 19 2010 Hi
- Kagamin (2/5) Aug 19 2010 On windows dmd uses ancient OMF object format, but gcc compiles to COFF.
- Bob Cowdery (6/11) Aug 20 2010 Thanks for the hint. I found an object file converter and converted the
- Bob Cowdery (10/22) Aug 20 2010 A bit more playing and I see that it's assumed that C code is compiled
- Bob Cowdery (22/37) Aug 20 2010 Thanks for the replies. I've bounced off D a few times because it
- div0 (17/28) Aug 20 2010 C compatibly is fine as long as you either build with dmc
- Bob Cowdery (12/40) Aug 21 2010 I have compiled all my stuff now with dmc. It has some differences from
- bearophile (6/10) Aug 21 2010 Despite being in the works for about ten years, D language is young, and...
- Johannes Pfau (8/13) Aug 21 2010 I had the same problem some time ago, and in some old newsgroup post I
- Bob Cowdery (3/13) Aug 22 2010 Well, the link still works but the download is 0 bytes so I guess its
- bearophile (4/6) Aug 22 2010 That links works for me :-)
- Bob Cowdery (2/8) Aug 22 2010 Works if I paste it but not straight from the email,odd.
- Bob Cowdery (4/12) Aug 23 2010 Does the tool work for you. If I just build the default GCC DLL and then
- Bob Cowdery (9/21) Aug 23 2010 Addendum: The plot thickens. If I build a dll with my VC++ Express 2010
- Andrej Mitrovic (4/27) Aug 23 2010 I haven't read the specifics of your problem yet, but have you tried us...
- bearophile (5/8) Aug 23 2010 I like this, and I love the way you install it, this is the way a compil...
- bearophile (3/5) Aug 23 2010 Uhm... The last version (6.6 that is gcc 4.5.1) seems to produce very la...
- Bob Cowdery (11/19) Aug 24 2010 Thanks for the suggestions. I wound back a bit and looked at the 3rd
- Philippe Sigaud (8/10) Aug 26 2010 using Code::Blocks.
- Andrej Mitrovic (5/13) Aug 26 2010 CB uses the Scintilla editing component, which is the one used by Scite ...
- Bob Cowdery (8/19) Aug 27 2010 Hi Philippe
- Andrej Mitrovic (2/81) Aug 27 2010
-
Philippe Sigaud
(443/443)
Aug 27 2010
On Fri, Aug 27, 2010 at 11:08, Bob Cowdery
wr... - torhu (7/14) Aug 26 2010 If you've got a DLL, you can usually generate an import library directly...
- div0 (10/41) Aug 21 2010 Well that's true; D still isn't really ready for production use, unless
- Bob Cowdery (5/46) Aug 22 2010 Thanks, that's an honest opinion. The first project I have in mind is a
- Kagamin (2/6) Aug 23 2010 You can try to port it now. You have htod and some level of source compa...
Hi Just trying to get started and need a little advice. First up was selecting an IDE, tried a few and settled on Code::Blocks. I need Windows and Linux and also C and D supported in the same IDE. The support does not seem to be finished in Code::Blocks though, does it really not have syntax highlighting for D or did I miss something. Anyhow it works well enough for now. First task was to build a test of D calling C. Made the simplest possible C static library, one method returns a string. Made the simplest possible D app which calls the C method and prints the result. I built the C part and then referenced it as a library in the D build. The D build goes with no errors and says it has written the output file... but it doesn't, there is no output file. It says: Linking console executable: bin\Release\DTest.exe Now I've tried this with just D code and it writes the output and runs so I know something works. Does anyone know where to look, is it Code::Blocks, compiler, stupidity (probably). Regards Bob
Aug 19 2010
Bob Cowdery Wrote:Now I've tried this with just D code and it writes the output and runs so I know something works. Does anyone know where to look, is it Code::Blocks, compiler, stupidity (probably).On windows dmd uses ancient OMF object format, but gcc compiles to COFF.
Aug 19 2010
On 20/08/2010 06:51, Kagamin wrote:Bob Cowdery Wrote:Thanks for the hint. I found an object file converter and converted the C obj file to OMF and it now builds. It seems very odd to me to have to jump through this loop. This should be up in big red letters on the D site somewhere. bobNow I've tried this with just D code and it writes the output and runs so I know something works. Does anyone know where to look, is it Code::Blocks, compiler, stupidity (probably).On windows dmd uses ancient OMF object format, but gcc compiles to COFF.
Aug 20 2010
A bit more playing and I see that it's assumed that C code is compiled with dmc and then the D code can be compiled with dmd which will also link in the obj left by dmc. It wasn't clear at all that to make things work easily one needs to use both the C and D Digital Mars compilers. Code::Blocks has led me a right old game by adding in switches the compiler doesn't understand. Eventually got it configured to use the dmc and dmd toolchains and managed to build and link in a C library. Some progress at last. bob On 20/08/2010 09:54, Bob Cowdery wrote:On 20/08/2010 06:51, Kagamin wrote:Bob Cowdery Wrote:Thanks for the hint. I found an object file converter and converted the C obj file to OMF and it now builds. It seems very odd to me to have to jump through this loop. This should be up in big red letters on the D site somewhere. bobNow I've tried this with just D code and it writes the output and runs so I know something works. Does anyone know where to look, is it Code::Blocks, compiler, stupidity (probably).On windows dmd uses ancient OMF object format, but gcc compiles to COFF.
Aug 20 2010
Thanks for the replies. I've bounced off D a few times because it didn't seem ready to risk a whole development. I should have mentioned I'm trying this on Windows 7. I did suspect object formats were incompatible but as you say would have expected a decent error message. I also tried from the command line with the same problem, it just generates an empty map file and nothing else. I also tried using gdc, now surely the output of gcc and gdc must be compatible. However, it didn't work and it doesn't look like gdc is being actively developed. I'm still concerned it's a bit too soon as a lot of things seem to be either Windows or Linux (cmake says its only tested for *nix) but not both and there is very little guidance on building. I really want to get this working on Windows first. As D makes so much of its binary compatibility with C I find it odd that there is no information on how to build mixed systems just on how to code the calls. dmc gives me this error: OPTLINK : Error 118: Filename Expected LIB="C:\D2.0\dm\bin\..\lib";"C:\D2.0\dm\bin\..\mfc\lib";C:\Program Files\Gtk+\lib The paths are correct as far as I can tell. Sorry, didn't mean that to sound like a rant, just not sure where to go from here. Anybody got a definitive answer as to what works on Windows. bobJonathan M Davis saidMy first question would be whether you used the same linker for both D and C. On Linux, they should both be using gcc. On Windows, they should both be using dmc. Still, I would have expected a linking error to be a bit more explosive than nothing.steve saidMy experience has been the opposite - dmd is needed to link programs that mix C and D. While you may not want to jump into CMake for builds, the regression tests for cmaked include building and link D+C objects and D + C libraries. http://code.google.com/p/cmaked2/wiki/GettingStarted FYI, cmaked is still work in progress, so you might run into bumps. -steveKagamin saidOn windows dmd uses ancient OMF object format, but gcc compiles to COFF.
Aug 20 2010
On 20/08/2010 09:17, Bob Cowdery wrote:I'm still concerned it's a bit too soon as a lot of things seem to be either Windows or Linux (cmake says its only tested for *nix) but not both and there is very little guidance on building. I really want to get this working on Windows first. As D makes so much of its binary compatibility with C I find it odd that there is no information on how to build mixed systems just on how to code the calls.C compatibly is fine as long as you either build with dmc or convert the VC c libs to dmc's format. The conversion tool is only available as part of the paid tool set off of digital mars I think; though possibly there's a free one around. Try searching the learn archive it's been discussed before. Personnaly I just compile stuff with dmc and it all works great as long as you get the extern c declarations right.dmc gives me this error: OPTLINK : Error 118: Filename Expected LIB="C:\D2.0\dm\bin\..\lib";"C:\D2.0\dm\bin\..\mfc\lib";C:\Program Files\Gtk+\lib The paths are correct as far as I can tell.Optlink hates spaces in paths. It will also barf if you have spaces in any of the directories in the PATH environment var as well; you should setup an explicit PATH when running DMD. If you really need stuff with spaces in the name, you can use junction to create symlinks on 'doze and put the sym links in your path instead: http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx -- My enormous talent is exceeded only by my outrageous laziness. http://www.ssTk.co.uk
Aug 20 2010
On 20/08/2010 18:44, div0 wrote:On 20/08/2010 09:17, Bob Cowdery wrote:I have compiled all my stuff now with dmc. It has some differences from gcc which caused me some issues. I then went to link up my program with a D front end and realised that I use many 3rd party libraries which will all need to be converted. This doesn't seem like such a great idea any more. Why does a modern language use an old object format I wonder. For me at least I'm wondering if it stacks up. Linux support seems secondary (correct me if I'm wrong). The only painless way to use C libraries is as dll's and even then the import library must be converted for which the tool in not free. The language itself is nice but the hassle factor for mixed language multi-platform seems quite high. I hope I'm wrong on both counts.I'm still concerned it's a bit too soon as a lot of things seem to be either Windows or Linux (cmake says its only tested for *nix) but not both and there is very little guidance on building. I really want to get this working on Windows first. As D makes so much of its binary compatibility with C I find it odd that there is no information on how to build mixed systems just on how to code the calls.C compatibly is fine as long as you either build with dmc or convert the VC c libs to dmc's format. The conversion tool is only available as part of the paid tool set off of digital mars I think; though possibly there's a free one around. Try searching the learn archive it's been discussed before. Personnaly I just compile stuff with dmc and it all works great as long as you get the extern c declarations right.dmc gives me this error: OPTLINK : Error 118: Filename Expected LIB="C:\D2.0\dm\bin\..\lib";"C:\D2.0\dm\bin\..\mfc\lib";C:\Program Files\Gtk+\lib The paths are correct as far as I can tell.Optlink hates spaces in paths. It will also barf if you have spaces in any of the directories in the PATH environment var as well; you should setup an explicit PATH when running DMD. If you really need stuff with spaces in the name, you can use junction to create symlinks on 'doze and put the sym links in your path instead: http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx
Aug 21 2010
Bob Cowdery:Why does a modern language use an old object format I wonder.This problem will need to be addressed (among others).The language itself is nice but the hassle factor for mixed language multi-platform seems quite high. I hope I'm wrong on both counts.Despite being in the works for about ten years, D language is young, and the manpower working on its tools and back-end is quite limited, so such problems get solved slowly. In theory help from external people may help the situation, but it's not an easy job (are you able to change dmd object format?). Languages as Scala become usable in less time because they are based on an already existing virtual machine with good GC, a std lib, tons of tools, etc. D is both an ambitious language (C++ class performance with a better design) and is not much based on existing 'platforms'. So progress is slow. On the other hand Walter has shown to be determined and able to go on and on, so I have hope that many problems will be addressed :-) Bye, bearophile
Aug 21 2010
On 21.08.2010 23:07, Bob Cowdery wrote:For me at least I'm wondering if it stacks up. Linux support seems secondary (correct me if I'm wrong). The only painless way to use C libraries is as dll's and even then the import library must be converted for which the tool in not free.I had the same problem some time ago, and in some old newsgroup post I found this link: ftp://ftp.digitalmars.com/coffimplib.zip It still works. So I think it's free to use by the D community, but I could be totally wrong. Only Walter can answer that. -- Johannes Pfau
Aug 21 2010
On 21/08/2010 22:41, Johannes Pfau wrote:On 21.08.2010 23:07, Bob Cowdery wrote:Well, the link still works but the download is 0 bytes so I guess its not available. Thanks for the thought.For me at least I'm wondering if it stacks up. Linux support seems secondary (correct me if I'm wrong). The only painless way to use C libraries is as dll's and even then the import library must be converted for which the tool in not free.I had the same problem some time ago, and in some old newsgroup post I found this link: ftp://ftp.digitalmars.com/coffimplib.zip It still works. So I think it's free to use by the D community, but I could be totally wrong. Only Walter can answer that.
Aug 22 2010
Bob Cowdery:Well, the link still works but the download is 0 bytes so I guess its not available. Thanks for the thought.That links works for me :-) Be happy, bye, bearophile
Aug 22 2010
On 22/08/2010 20:57, bearophile wrote:Bob Cowdery:Works if I paste it but not straight from the email,odd.Well, the link still works but the download is 0 bytes so I guess its not available. Thanks for the thought.That links works for me :-) Be happy, bye, bearophile
Aug 22 2010
On 22/08/2010 22:16, Bob Cowdery wrote:On 22/08/2010 20:57, bearophile wrote:Does the tool work for you. If I just build the default GCC DLL and then try to convert the import library it says it's not an import library. bobBob Cowdery:Works if I paste it but not straight from the email,odd.Well, the link still works but the download is 0 bytes so I guess its not available. Thanks for the thought.That links works for me :-) Be happy, bye, bearophile
Aug 23 2010
On 23/08/2010 20:24, Bob Cowdery wrote:On 22/08/2010 22:16, Bob Cowdery wrote:Addendum: The plot thickens. If I build a dll with my VC++ Express 2010 then I can convert the import library and it actually works from D. However if I build with MinGW GCC it doesn't even recognise the library even though it is COFF format. My preferred route unfortunately is GCC. I just got 'The D Programming Language' book and that devotes a whole half page to this very important topic. This seems to be rather a minefield and so far there only seems to be one route through it. bobOn 22/08/2010 20:57, bearophile wrote:Does the tool work for you. If I just build the default GCC DLL and then try to convert the import library it says it's not an import library. bobBob Cowdery:Works if I paste it but not straight from the email,odd.Well, the link still works but the download is 0 bytes so I guess its not available. Thanks for the thought.That links works for me :-) Be happy, bye, bearophile
Aug 23 2010
I haven't read the specifics of your problem yet, but have you tried using the newer TDM port of MinGW? The MinGW binaries are still using an older port of GCC, but the TDM version is much newer, so it might be worth trying it out. Get it from here: http://tdm-gcc.tdragon.net/ Hope that helps. Bob Cowdery Wrote:On 23/08/2010 20:24, Bob Cowdery wrote:On 22/08/2010 22:16, Bob Cowdery wrote:Addendum: The plot thickens. If I build a dll with my VC++ Express 2010 then I can convert the import library and it actually works from D. However if I build with MinGW GCC it doesn't even recognise the library even though it is COFF format. My preferred route unfortunately is GCC. I just got 'The D Programming Language' book and that devotes a whole half page to this very important topic. This seems to be rather a minefield and so far there only seems to be one route through it. bobOn 22/08/2010 20:57, bearophile wrote:Does the tool work for you. If I just build the default GCC DLL and then try to convert the import library it says it's not an import library. bobBob Cowdery:Works if I paste it but not straight from the email,odd.Well, the link still works but the download is 0 bytes so I guess its not available. Thanks for the thought.That links works for me :-) Be happy, bye, bearophile
Aug 23 2010
Andrej Mitrovic:I haven't read the specifics of your problem yet, but have you tried using the newer TDM port of MinGW? The MinGW binaries are still using an older port of GCC, but the TDM version is much newer, so it might be worth trying it out. Get it from here: http://tdm-gcc.tdragon.net/ Hope that helps.I like this, and I love the way you install it, this is the way a compiler has to be installed: http://nuwen.net/mingw.html Bye, bearophile
Aug 23 2010
I like this, and I love the way you install it, this is the way a compiler has to be installed: http://nuwen.net/mingw.htmlUhm... The last version (6.6 that is gcc 4.5.1) seems to produce very large binaries, and the precedent version seems not available. Not good for you. Bye and sorry, bearophile
Aug 23 2010
On 23/08/2010 23:04, bearophile wrote:Andrej Mitrovic:Thanks for the suggestions. I wound back a bit and looked at the 3rd party libraries I was using and what do you know, they were all dll's with import libs. I don't know what compiler some were built with but they all converted with the coffimplib tool. So I rebuilt all my stuff with dmc and after a bit of faffing around with link errors I got the whole thing to build with a D front end that just makes a top level call to initialise everything. It correctly reported it couldn't open a usb device so it looks like it made its way down through several libraries to the hardware without choking. I might be on my way :-) . bobI haven't read the specifics of your problem yet, but have you tried using the newer TDM port of MinGW? The MinGW binaries are still using an older port of GCC, but the TDM version is much newer, so it might be worth trying it out. Get it from here: http://tdm-gcc.tdragon.net/ Hope that helps.I like this, and I love the way you install it, this is the way a compiler has to be installed: http://nuwen.net/mingw.html Bye, bearophile
Aug 24 2010
On Tue, Aug 24, 2010 at 15:24, Bob Cowdery <bob bobcowdery.plus.com> wrote:I might be on my way :-) . Good :) I just skimmed through the thread, so I don't know if you're stillusing Code::Blocks. I'm using it, and it highlights D code with no problem. For 10.05, it's in Settings > Editor > Syntax Highlighting > syntax highlighting for D (default color scheme) The keyword list might need to be updated a bit, maybe. I don't know if the original install has 'immutable' as a keyword, for example. Philippe
Aug 26 2010
CB uses the Scintilla editing component, which is the one used by Scite (which I'm using atm). Scite was missing quite a bit of keywords, so I've added some of them. I just did a comparison, and it seems they're both missing a bunch of keywords. A fun thing to do is open CB and Scite side-by-side, and paste all the keywords from both and see which ones are highlighted. I've fused the two together and removed duplicates (I also have string highlighted which you might want to remove). So the list goes: property abstract alias align asm assert auto body bool break byte case cast catch cdouble cent cfloat char class const continue creal dchar dstring debug default delegate delete deprecated do double else enum export extern false final finally float for foreach foreach_reverse function goto idouble if ifloat immutable import in inout int interface invariant ireal is lazy long macro mixin module new nothrow null out override package pragma private protected public pure real ref return scope shared short size_t static string struct super switch synchronized template this throw true try typedef typeid typeof ubyte ucent uint ulong union unittest ushort version void volatile wchar wstring while with __FILE__ __LINE__ __gshared __thread __traits const_cast dynamic_cast explicit friend inline mutable namespace operator register reinterpret_cast restrict signed sizeof static_cast typename unsigned using virtual int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t int_least8_t uint_least8_t int_least16_t uint_least16_t int_least32_t uint_least32_t int_least64_t uint_least64_t int_fast8_t uint_fast8_t int_fast16_t uint_fast16_t int_fast32_t uint_fast32_t int_fast64_t uint_fast64_t intptr_t uintptr_t intmax_t uintmax_t wint_t wchar_t wctrans_t wctype_t time_t and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq complex imaginary _Complex _Imaginary _Bool _Pragma Philippe Sigaud Wrote:using Code::Blocks. I'm using it, and it highlights D code with no problem. For 10.05, it's in Settings > Editor > Syntax Highlighting > syntax highlighting for D (default color scheme) The keyword list might need to be updated a bit, maybe. I don't know if the original install has 'immutable' as a keyword, for example. Philippe
Aug 26 2010
On 26/08/2010 21:43, Philippe Sigaud wrote:On Tue, Aug 24, 2010 at 15:24, Bob Cowdery <bob bobcowdery.plus.com <mailto:bob bobcowdery.plus.com>> wrote: I might be on my way :-) . Good :) I just skimmed through the thread, so I don't know if you're still using Code::Blocks. I'm using it, and it highlights D code with no problem. For 10.05, it's in Settings > Editor > Syntax Highlighting > syntax highlighting for D (default color scheme) The keyword list might need to be updated a bit, maybe. I don't know if the original install has 'immutable' as a keyword, for example. PhilippeHi Philippe I'm running 10.05 but when I go to Syntax highlighting there is no 'D' in the dropdown. I have C/C++, Squirrel, Windows Resource, XML. To get some highlighting I just set the mask for C/C++ to include *.d. On the code completion plugin it says only C/C++ is supported. What am I missing? Thanks Bob
Aug 27 2010
CB doesn't officially have support for D (I don't see it in code completion either), afaik. But it does have syntax highlighting for it. I have about 30 or so different languages selectable in the highlighter, I think these came by default. Bob Cowdery Wrote:On 26/08/2010 21:43, Philippe Sigaud wrote:On Tue, Aug 24, 2010 at 15:24, Bob Cowdery <bob bobcowdery.plus.com <mailto:bob bobcowdery.plus.com>> wrote: I might be on my way :-) . Good :) I just skimmed through the thread, so I don't know if you're still using Code::Blocks. I'm using it, and it highlights D code with no problem. For 10.05, it's in Settings > Editor > Syntax Highlighting > syntax highlighting for D (default color scheme) The keyword list might need to be updated a bit, maybe. I don't know if the original install has 'immutable' as a keyword, for example. PhilippeHi Philippe I'm running 10.05 but when I go to Syntax highlighting there is no 'D' in the dropdown. I have C/C++, Squirrel, Windows Resource, XML. To get some highlighting I just set the mask for C/C++ to include *.d. On the code completion plugin it says only C/C++ is supported. What am I missing? Thanks Bob <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"> <title></title> </head> <body bgcolor="#ffffff On 26/08/2010 21:43, Philippe Sigaud wrote: <blockquote cite="mid:AANLkTimj4AUp=MB-fVEFqsmsiK6DvsMMDXST8-FvfNHr mail.gmail.com" type="cite"><br> <br> <div class="gmail_quote">On Tue, Aug 24, 2010 at 15:24, Bob Cowdery <span dir="ltr"><<a moz-do-not-send="true" href="mailto:bob bobcowdery.plus.com">bob bobcowdery.plus.com</a>></span> wrote:<br> <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> <div>I might be on my way :-) .<br> </div> <br> </blockquote> <div>Good :) I just skimmed through the thread, so I don't know if you're still using Code::Blocks.<br> I'm using it, and it highlights D code with no problem. For 10.05, it's in Settings > Editor > Syntax Highlighting > syntax highlighting for D (default color scheme)<br> The keyword list might need to be updated a bit, maybe. I don't know if the original install has 'immutable' as a keyword, for example.<br> <br> Philippe<br> <br> </div> </div> </blockquote> Hi Philippe<br> <br> I'm running 10.05 but when I go to Syntax highlighting there is no 'D' in the dropdown. I have C/C++, Squirrel, Windows Resource, XML. To get some highlighting I just set the mask for C/C++ to include *.d. On the code completion plugin it says only C/C++ is supported. What am I missing?<br> <br> Thanks<br> Bob<br> </body> </html>
Aug 27 2010
On Fri, Aug 27, 2010 at 11:08, Bob Cowdery <bob bobcowdery.plus.com> wrote: *** I'm running 10.05 but when I go to Syntax highlighting there is no 'D' in the dropdown. I have C/C++, Squirrel, Windows Resource, XML. To get some highlighting I just set the mask for C/C++ to include *.d. On the code completion plugin it says only C/C++ is supported. What am I missing? *** ? I have *dozens* of languages in this dropdown. I've been using C::B for D since 2007-2008. Maybe they added files back then, and when I regularly updated with svn versions these were not modifed, whereas they are not part of the 10.05 distrib? Anyway, I attached a zip file to this message with the D-related files I could find. It's the first time I do this on this NG, we'll see if that works. Put the two lexer* files in CodeBlocks/share/CodeBlocks/lexer Put the entire 'd' directory in CodeBlocks/share/CodeBlocks/templates/wizard This directory are the instructions to create a new D (console) application when you create a new project. I have no D (Windows/GUI) wizard, but the structure is easy to understand. I'm pretty sure someone proficient enough can create the correct wizard for GUI applications. Philippe begin 644 d.zip M(` &````<WIZ]`````=T24U%!]0!%0\`*58RI=4````)<$A9<P``"Q(```L2 M`=+=?OP````$9T%-00``L8\+_&$%```'QTE$051XVL5766Q<5QG^[KVSKYZ. MQVOB.IL5DM*8M"$H 3:MDPBAIA2A$H1X:%50" ^54.D#HB*H` HO2(A5\`"B M4:)(QFV1FJ1)$[E-DR9&=AK'=NS$6[R,EQE[9CSCF;D[_SG7X_$PD]1O'.F? M9F+7KD8$ RX\J+%S=</B)7VSV*\X3_37/YW'TT__S+QTZ8T2$*)UL`'3-!\L MW+3(-(O]55HCR%S;7[.FKOXATO!2V;DK&C!0D,]4V-,SC7Q>A<TF0I(8"9R+ MIF&'PUL&0"PX5]'13'YS\DLXR5T"M&*90"PK1/+Z*:M*2&6453]H:JZ%I8<* M`/0UILF8-C`\ZLIWD%9(67W]PO,6SQ >&*19MZOHD)4:!^#W.XHF,"5N=V5E MP^B\C/;NU.K!GTFDJ5Q. RUV!Z9NE$2"P^&K[`/,<PMMF4YHJ?=#I0UWIY?Q MZW.S>.K`IO6I/:]#C47A2$S#D/.X?$OG2N?V=SH "&(Y ),G;Y L" J-+6;" M[]&!'5=C:#O0 MHF"9H+HF5-$$-I7"2-?-5>%+N C:AQ2I_(O[F[E'%VZXD-80C>=P=/I9A!8Z M4KJ5<`I"D\L&!B:S&)Q80B8C0R=T]5HG6 _O 6OGZX!W*X5+'6JV/HD=3WP; M^X;_ C^_^4^$Y;O(Z#N1S M>3&<J*&A=L:#ITS0H966B"2W*7'>CTL91+P(T(7]L[DD+85\TO%PA6<$*6 M")-4;[*`K]`6YZ;04I/%L>ECF-<B&#A]"%4MSV-#ZW-\OKGY*XA&>TI]P.MS MFG"1\P:?)YN+E%?5)*EH L!1BE83Q9.4&0+0!46LY9^AL!>A2!5V--IP\;*. M=S].PNETE&G,9AB"Y80L3!P.?/\+;G1-2WQ2(.%VO(+<R`?P#O\1MI97K5T" M1&RI"6!+A-U<L-(HCD!+'D#JQA\0WOR]%==U0I?H(&7.^M;CQ0.]$7Z>W6Y= M1L';!#DU3\(SM*GHD*H0AM=OY8<<A?-'UU1XP\V8'>Q$8U-Y228GU''BK>O\ ME:N2]Q=XE6,.W]KQ%ER),S"IBID//T:F.$6.^`Q)EV`+/PIE[`2<IHZ5HHJ1 MX21J-^Z"QVL];A,)!8>./([;O;WH_%T;--=V"/EMI0"&AJYC?#R`I:4$/:44 M_CIZ]>!5?'7;)_0,"T+ZTD\A/OP25W?TW]^$-]H.J?$H;*$69/JS\&;[J=2U M #OW .XXA`<"8*W^)0AG"&UJ9ASQ]YY#INO MA.$K_X*D+8(E8T45(:<3,,E?8I-CN/B/#H3]2;[_5-_]+[HN`*RQO)))Z109 MW:`74I:__V2%5<TTA2[QV6Z+J\M$UMSTP!(?FTJN5\+_J?T7C`C6;W'GS) ` M,/GOS'NWYLU[4[6_ZJ]6K>J]5DOMZJX.DY,1183#A0,``(CB8D(*?]M"``", M$P;\[Q_6N'7<WP;65DS=`0"`1_OG`P.D9V+_!:$=Q:6%H1?!D6"(8% 6+RS^ M0M\=A=4<!6VLK(RL'0&"]D;ZCD:&0!<S1U. DJD14%1<6N[2\(<U```$B`OQ M<6$[N?+Z^A+C%>PUR?VHK'^R<+6\U59QTL65W>[S^NJUMYD!\$NY1(+E7M[B MF\YI9:YNU+(;O$A+D]D#C MX,#AP(L2.VN4^/SJ7>I-DA2J^"#C9K]5WH$;.W+2&.^%?(P7V1FXWAXP`&)^ M,CYNOMI>3$I3T_NBFO;0(P R1?H9SY2Q+&>2DH9)Q]LRBFW:;XP[3?&211'V M/#VI$$!FSJ1;7596(DRN<=R'\-:QH'YC4-.O+%3#URN*V>=1 5*[,"C2]2%1 MX>M37!^/%\M^;!W\VCZ=[COP9F.8H7K6, \7 RG=X\V;E!Z/UO,XQ"7JH))B M6Y]<GN=4V2!,#V0I3I MGK(\<3^7A_%9C8G8Z,4 MZ*OR[ .=>[#N6 M9F*NYT^B0_[H_ARA^S61B2NL-W3V,&&1L&#S80QIAKKN"7K>^LSHOJ=9:8KR M[5CHODX_OI%[;2>IGK?LI&P^S2WI?M30O XAOK#YN.]/Z+<9,L<T N[&<.N- MRB=X?3\F>,\H02)SV:!SV:2J\= 0%?%:RMBJ'(SK_O28>ZIWF!1_.-_;G:JK MSFMNYL\U/#N\>+7N!-\);5-9P\7N;4;N7%\GP^SZR8<W28EL8.MZ&>XKNG`[ M7!H,MW4&-C*L`D*//2$P<LJY6W]$U_U>BV1]Y&TR]&HX3AN1W[H_454E/2-X M+MY\:/(UM;K YL!2_/EQX0+M<P7-S]Y7=>)X9>*#Z7WYN"N$TM",] NC:B5X MR>Y7HH*DU\>3ZD'7]=,HD%4$)!XU,[YZQJ)Z.FBSN,GE8HO?P\`]MMH 4"=^ ML[=D3,SPI:?)8+,+Q>.$3?5X<,YKJZ,](SY!3$T'XW/6UHPL]P^RZU^56G:0 M&XZ*ST4^UU ='BZ,+!A;G YI9DC ;P\V(60KQE\,(Y<[1GWMUKPB;JG*:FM9 M3DE6JD$-,/U!NYLH3#W[%K]]27N^[B3^:L$UH0,[5) QO^EQE_:>8GG9>=R3 M$7UDA;SU(IA!Z[;1JMJ%V9/-S6M[E<L\I+U59O$RFZ*RZ?"X8;GEM*2-<57= M&BSBDPY MR^\.7MR?3Z'1AZ%Q$K<NG'QP>)^+EQWPMKR:O9\`!W,B.X7ZHY3 MM-K`3K-L/=$ /!2`N)9.:ZATW!>ZVQA"<[Y]<]ON\FF[SXOQ.</+:;-?&_L4 M"L3K/CV27^GJ_%9SOE9F)]-B/\FA]#WE M`D85CX?I;.[>4]V8O[OV[;?H>/<SFUE\YGB$W>&BQI,7-+7W+SV+"5(J,7C4 M.OV*1:)9G.'QTR[8!?ZVT">*`M3"X?KF'R&U;XU"YX!:M].!`ZN,[&ZNCG>J M`Z;/EF7KYK\[=+,3H[:F*YWG-NV2^H):H%TC`&$FK,M.;?,6WZL7TG$OBI\8 M\BQ)EQU-^_SXKGSD13#NPR])2L?O"0,P]/TC#JBX)O$=*4/R_0#DO()7OXRX M`"OL67^?-ZN*[*OZL'Q#C9X+0&[".W?7OV>S^8B>^#PZCF;K8NA\NWGBOIQI MWIH<CE[ /0G&\T_P8`A!$D]ZD!5HWH8-TM%P0`^B!LP'K97X?(S2U'3_.IW2 MX7CE5OU(77D)+_+ `71"`,JM_*O$LL$`3#GRPP--Y'`%Y(`K9)>P]'6'G3%K M",LDT$X[SYM^5O'^_3^5<`_O%,MMDJ/E_>$(DJ[V0*+K96'TS?4Z`C1<TUK, M$155H2D:`%Z\/FZTCP<6N4,>O<T>GXDK,O]NZTL?GR!DF]:B>S]DH13=: V: MLW7Q[ >+G<['IIJ.^HX;9*_2FQ>7#N+USHQ)[I3-]PLXJK>5G/?;"E)5[2)\ M[Y;;KD>CE!ESPC+W_!B>4;+'7SQ78-KW;0M6S8TUG2K2,D3AM198G2\+O9]O M.3,S!5EHGQ 0=]&O^1G6+[O5&YIS\X44:SYLC=G/*X>?.9-U4^(6"J0Y6.7[ MQP1O#G MCO*$-UH=/[=WI[S.]Z)TL82?[DHT:]RD;=\J2KHZ;\-D&[P/3!;=WZN:TY>Z M>>RDCM7V#C.W]_IOJ+KCU^TC.%JQ_MH0MO&R<-T-L+47J!'%;WT=(2M)28GY M(9[/\CE\>O$6%]%=SH#F M]I6OAB[#V2HC%:G.WTNVF:[-<5B9CEF^X]+&QN.)CO?S"OD2]_.MUUJQ,&2I MB]5[RB/_\XH GQS73(CWPTY;ZRV*;4BBT>>D)#WD"2V'OOM.\IJWXB&6.YO$ ME<3XO$N&%I-J1JR1(>GOY[6:)&]Y,#WPA'5O;&ESO;5<#UTIU M 8_K_3F?'<\1W?3]A"OW2]!LF] Z#E&K=0&5:'<+-3<A/(4V[1,('"-[ROM' M:ZP`U4[*EC?[1B>JJ)B"K6&FJ=^;G9[#W]]6IM)?+_:<(/!Z\C1)C8?\RKBS M="/BGWF.=&_Y3%FYV]:";L.36K\`=G5RS'YYFI_XM5_R'K9B665OW#T5.'S> M/^*_W6T]$&CVF.3H>"5W%75[E;"!J^1,&+;><B>L%=<^[Z98O7?IGM-.$GA? M/6QLO2;`(WN;/U9LUEU.RLJ>=W6P?0K-ASN?I3^'R&Z^M&I^?EPQ\GQLEZO6 MSQ'M #P_)3]O3P0O<Q(-=#U. MA*WQOI55*4;XBKXP![Q;9NCE`RHD1?:.ZDIX%\[-"XI?*JA"LI^;H1_/D_3> MCN):^2.SVHL)?!B?H[5$Z4PRC;^X[L(,$>N</;PP[$+8M<63A"+[<(NCE&RP M"V=N]_2/B?N_1WCWR): U.Z*]LZUI"!BN[M=ZWE<,U\,6C1A(3=AR>[I=!A[ M#V_B7R2S]8C_`OT?N?\*&]!_Q_L?;/T;^ ^Y_XJ,\_^&Q[*&[/<_^?HW]!^B MTWEX?4 :`XL2HDAT!)T` -#KE5^%ZX'Y=:RVBII;H D^?C\$H)^.20+X.KXJ M>9[%N>VA< ?T;++B:75X;#U MZ1=:B^I';_*I5D"\X /.QW\CZIJQ?,R(G<'"1[0]:0R&S<YIYP< . I1!+^; MG=%WN$$9)'TP()1>P^X$$0JQ?CTL.'W^X`81.-1 `HH8I1 9T!?F<<AMVJ_G M3M/962#V 1 F7B?U#AQU !O\:A[MX&SQ;&5%;VU\R_O4KYM8CJ]\:;5A%5^S MC\X9A"H76&?F2!IG?H0>+(PGWHC]Q4J/^3 Q2L:I/,JX0!KWTGM7\'8*-L / M`Q6*PMP&?NWG1]<YP8=B!QE_/-"(5</"`($)3R9-72 5>27,P/FR^9;LUEUY MV-A5CN6O8V4,Z5$,E8 <;7'1H9QZK[ P7+V.G56^N&^W:\HOJ1<:O ^E&ZY MS9$??'C](O#PJ6 MB.]S,)I2]+B)6 6]7$)T1P0\)/V5.SP+G>;M[PVN(`=A=,^)-7FL+(00\$/1 M+H*-22T71Z3'%PR!7TRM%X;DMX *!7F14FHQ!: 6!B R;+E,'Q'Z1VN2VH]/ M$-Q:T`\<G`],N%=MS%+C''= CQ*I%RH=`T&3H"\T=,%*\ 8!!I)_% \[R[<G M^E=`I;7)9_)>W^)C+-%/!1IQCU[W;?MP9BZ&N=95.+ZR6E2< 6NA>%^8<,!7 M:4Q<E+6^AU`X^9!R?Y=7,`DISK2OX :&C-X96T1]C1'Q+[H$'` P5'YA?>RZ M6DQPAL#Z*2A)5'5T8L+!2YI8C-JAV9G:^6C0'!X6ZB]_\(90OA<[SK _Z>?E M3 ?=['H1B8:3"*SYTL9C-..8KI(W'+/C4GVKM?KZ_=12?6D\$6K:4TD2R]Y5 MA+%\<?NZ,,!$`=!.Y/48<FT.N.1Z41&F?KT//Z.OI"<_(,(VFF%?=]P7'!L= M0!VPN9+%CY;P21Y:."Z"4A)62"$?S;QO:&*F10)?3AT2T8--<9V,8'"`8%QQ M:AD+-O'\:;ECC&K,`'ZJJ,XV0C1(E- ODU;T(U_J]A<"-3R]9A(FV(T9$0K8 M? I<;9-2_$[6N[&]Z\2'`O -17RK/3BY;V 02)9'DJ5]B>!++!\0'47!V(^D MC)"Y,VZ%&;?.,%5/&=1DK%L>_D3>?J/V-:./2F="X:9I/^QM%!*RDVV`!"*E MVFZS1X37;G3%*6.#NJI M>J:H-+79=![?VBK*--'$/!E),D*$(O C`,N`DH5M(FR TB7SN`:RJ>>G(,>G MZ`Q*UI1"2LI5&^P4"VU2G>ATE`F$X+C\TTK//?H;M#HB0;OPP %9)EYA#L8' M'$'&>,9?]/GCB\^!OJ>5/3 #U$5_8CFV>S(%STL9[#NI=`?Z%#AW2EOD%-B% M'L#R&3?D$W]%+HX'4:FTF,F$_L"0`=S\U PFM0VKV(O!<%B#RAMY4I?=RYKD M9!)<A>(W:C$R(/+8PI[LWKS>%!^%:15K-I(58RI"Y3!+G`4+\D4/K/>,3HT2 M 8%TSI)(22VNG%WR(JU=(WL/#BR%UCG/RQ(>Q7`ALW[=(CFJD-'F'-L [SQ M1]J;>P-KT&5V2I&5<>/=4'A\\!^5]2A &=`\9%F8#PZR`-TQF3;G?=,5Y8PV M,I5/ 4&$A*4R;<R2(ETI;_Z$D48;-L<^F&;:F.)9M[Z#K5 M.QY*/8-U5 &<I\S8#U2Q M_\X190NV`I*B^\D//3#SDS/<I\RF'Q8DM4R^HY9B?N'S:!2)FA=O\OU:TQ$3 M<1B*`MM_FFC"VM527KC_)/.7AO8/[-B.4)CL3;/'&BJ3'U0F'AO/!/(1R7C) MJ3WW73[]A%3.H4CV94<=N6EQQG9HOLD>59YE^2NETYJTQI^9%)B5MD)X]Z*' M5&CSIK'<^&%:GMD3+_7$\D$QX3/#U+&SZ'B)FX03S+;J(86J4$3IH!VEM9LZ ME&F3YHGLG)A,L<3(Q&=:9WMIYVI5`R4VY;2HMKH-,Z(_+>?"#PECT%FUW(I& M $)+B/C]&?.TL/5[5!=G0VU"MR!Z`D=B3'J*Z>(^LLF/<6):]`THA2C[+/(P M.*^Q/NK\CEVKT_AJXS6-1B[=TF0Z`G!I\X6J\AK?CM#Z.,NF\VTV%/T9: `Z M!Y+TSL[!M"U/89`=K72>KZ1V!7V+!51F;*>67FXY2Q1N+R9/.GOK D2\DKRS M'5+"$IP.\S>=V#D34<%!.AW1?.XDYNRVS1;,?DPR8Z)=(C1A 05S8%)D%J*+ MFW45IA;&4;*4=GFC07D037-DZ`!ZE2X&1(FKU\.?/VZTGB*%INU&A\9<OF<2 M,94%U!;\#C>;/Y13.!B5TEU_U-3)6V$JWRT=,]D2>XDY62=Y]<^&.A8E"MMN M_)80F39&-W54X$A;!3+C0R0()S$9S>P&=^S#M.B4)ZQ!M-HJN<F9C]'<=(0Y MW;2FG]?3D9(IZCJ%.O1?>+>4DVH&HVWUES40E>^-?_E-+7T-GX'.?F:S!62^ M*$9!C#VX1ZSF 1Z^)"SQ["D*JA:J&`2-CEAPN/U.]THL#BQ6 MDUDX%G+"RX$,E*!T;BNTH]QB.0.B `F,/+T0VDNP<"$T<_)F-:IET*1]L` 7 M*5"%MZ#U M5A":&(KX?]7QI"]8]97:E3[5)D'\0(SS/(\SS]5Y*YK.G.73:&C!O/XZ(_=Z M_I5:)!QL`&1S+B G6+2U4\<-+,\!8LQBLNFJO(KR(;`I%%AB 9EE_G:*`!9O MLT\FC5V]C*,HZ-ALQ.>T\`[5+.I9RT#F[&*_5Y-?:ZU9'P)EQ52ECIX2-NTG MGKT+"XPYG)8$5`64S)EB<6U3?RJ9'%]AL];="^I7L;A6UR.9X<"Q8BO6_O;0 M176B+=8Z%Y42F:5N)>JG`M=ZG">$HG /+ZQAA8E:(J(^C6JG2<<HHO80.0E7 MF\A4U40NYZEC#C1_QA7$M6JZK>ZU;(>J[50 Q,24BSL84?$QVL%AGXJ% A"6 MDPFJP,50^H),2':B9C+!X[1+?8GF^[5.$G+T05*4#N2* &A)W?^$RA+$,TEY MIF" 3"]U! X3!M-P<;C#HF>((EEH4/!%/E<`L8Q#S M7W"G2$1:%`GJ=+[8OMRL8VFN.DQJ966BD-/=-CPJ:&7R';_4,R2^ TTVU6I] M,/G72+'YV83IJW?2H*5$8\F/<]A3PG:ZLC!0$1A<>.C LC\7B_HCHSOMRV?6 MD$M[`T*E.*H011$,F#C2SP6R*ACRM>Q?!=-/35984Q/G(-[0N*+AL6H!2FW< M")S#N)0%>;X>RYYG(LM7ADR:+\0>W;8U9^$ND$4P)"O>4D+ &-+T$&U3I%4E MFX8X]D0I`\P"D[8-SMY)*-MZ!+6H$E1Y9%V:H0&>2C5!UDIAJ-]TC,Z<D1T% M.5,<\P#C0H-;%5.*^875I (?!MMO^R!4?6$)\MKV!T-\CVE8?YF>,!)N!G]? ML7TGK/JYJ+"QK 5_/RLT!YHJ.DLNIK,A:S`A]:\ 1"E+H8;0X%K;='NBS-#C M<`3#US_ M0")Z%,S%6"7 MMI`H7%/)LQC67\&60`\YT^,$:1"37:K8V9&LY;ZKS2T]+[$ MG?<LRR5D=^Y7O5<=M]7>+\<^L[YQEJH0`OU?EW"K&P,AMC$+0-(_HFJ_TC.` M)BJF^ 8ZKC^.,&7 9J7(`!O :Z`9 Z^UGQ&>DKRN%PR14]ZZ2XQZ.S;_\2&^ M-?0'?NRA]MT>U);/46PEE1DR/,5]V9S_PS[=^N/5%P*W%;6[#I46=2-U"N$F M:FU+C_C>XG0ESS^R]O66F9\6$%+3Y5:`"3/+99 VHC( ZEWA7-*BMXAL'S:5 M(,%( :9[X?5KEC",,`>P(JZ9'E(.F O6OG=PR7&_+R#DKHS_7<GBX<R2G>FV M2-GNS.WU^:Y+XJ\0#M&VRGE*:T!;-^Z"+P.I$<NGA *O($:)3>_NGPW$)!% MB`7`)H)A)_9=Y!^ MR'Q?!6.<>3,4&\.`T\VF AH6OTZ0R*`1&*>0<-`T$CH M9E,5:&X=+>#SJU)A:^ _7;?B$'>C\$#I:$Q?X0Z6*T,;.-90U'PA:N?-N?-X M 4(A0>";?N;$12K6*G/$-R637NZ 1)8Y=7;B]-$=%3!(?SYQL5!P<U0-L,8O M[#M M%9F;ZSV8^-;I>3^F^XVK- = 6HE[+,JXH0)"C8(VIXX_YB,%=T3OXW-"S_?5 M!;+9(.6'&IL$`'.=,U9I8`6.'94J L +523?M\>NKP2/"3Z:IX=\*9*9']?, M%?%`^O2LW[/8,,XQ\X`P^7*0>1L(!)9L_%A5TJ.9IC+J"J )J7X,G$O;OVPD M[::HS;5\!)P#FIPDJP*%V+]+31+Y<7\9^F CS]?B$A=*),KXD98&FUIGEO"U M=UQJ&RE&(34=[NS>9K,R/[3)&C$`<,XJ'!=.M'!<2 ZG00/KSQZNA"*'K8`2 MJR!"0A.BWN,_5A.;XMG]L:K-6C7ASWQ0D/YBQ<+=:72FV]WYWLJ;Z$T=D/IJ MQQ;].D2BX 7/?MXME"A!Y$9:=.%E/)(!E[^P^3N17(-,3H8E" \-([I)82>9 M)HYA]GAZ/E$AO-*Y+8"9"2T4"$//7?57CB5L7ZP_X-QYVKR,/-^9*Y0((Y ? M71X;BA\%PD\A'&!4Y81BJC=(^X,AN`%3OP`1SZ"Y;I(5!%7(3<I'TB=06&\H M>89:)C6FI9E-34)Q.0?*"ZEPA9F>+ (14"'0A<L7\NF5SIN4IX$(%` !]`C^ M`<.$/_\'*9GTD*D:X,1QC.5221.HT:D8ERN(5TE#X9 M0E6[CO?7*$614G'>BI\8A%`/=6V:J4HA-$*J`1!3'$`\2X`0WPM<4XVZ1<-) M<V$^T2261=`9,KH9/^CN1 COUEG!9B-8T<R\/R&I'JK,81$)T6CTW;X#HOS6 MFXH6SL-%KUS[A2C0>;]%^/8.S9R%A:U8/Y(#BFI;3*/Q%_BO;%%^:GUA 5:` M<_K6I> P:076-Z1MW4-#S(J"X2)J2S&&H1(&2[EU6M0FW-INE6S /I8$18R9 MR%)]5\4F&WR*_3TK^!8T/,QF,D%);3?^D%R<[[2C+%Y'U\'E>/&]/*9\/E:G MI[F1]YQY[8ZNG!$DZ0J0B^Y/WBWDPQ(CL73$%YSTH5SQ*M%GT<:1F5!.H^^Y MP9/.\\J%(9L_JCMKVLQ&O0O8(ZYD!J+,I:*5N#MV.,07`J+",2 F+EPK%X+! MUS"JW-"7D_)L1K&QD+2)9Q=$?SO]+EO>(/W;\XP.=/YN)O0PO\,Y2$G+L9U" M9>/Y:XFNB$C+D?5!)A_>K[EV1B]42PHM]2KA<E%9).BN**GL-2>SW9/=N!.D M-]D7.(?5DQ()E`7&J?+9S^3V?:('X=N_WX8T2+8_.#TPK5$5L&8<%$FX/75Q MM5W8F"24+N0UQZJ51G0A^D_]B[+9\?:K40N7,4?LZ`RK;`F('TJVU()B>W/W M39L*GW]-Z O!#T M(L?ZQ1GB)F>$RLU"08;\8SJ<8(!XTJ9".A:JNX8%LU*Q8L>L\#H\"U2EWR19 MY<I M+OV#CLBDH M:RT:006.?2V11C*$PV!#I;?OSHLIIOUS8$UV/V\9N75N?YL* 8VPC``2S:4B M%LU`-\])$\=E)U.2C<*>AL8-RR4QHX[2SLXNSGV^"&MFY>X'2K<[2II5;,LE M(O$>1TH/)D5W6=]3)]TZ.]<=5/DIA!'Q=9VH3O,LO_$+Q4<U&39C?JSV(\/3 MQXB%*;V"A5C13*:D6!^.8`^![!X'^CLK3L`OD]>TT5N)^?UYR7>8<>Z,C8LF M)6'*?[$%>X`)) /:LM$3+I!>*'MT:+=7!!OKO"/<$3J5<(Y/KJ6RP,8YS?_X M%V"1 N[41 P-/^G!J6%,R>5$G-8TAXWG-"`O*\]#Q0,3B49E`>69E+\;)L-= M7JR:&()7%BE+0]/AJAH#I096 M-0J-V'87U?>(17)S6-A6DZ<PAD+[ 2P9%3"%B;_24I(U]D?H ^>8C60JH3/P MZES1()]-5H6S&KR&[]7C!$6R?;C-TY5956(;6[0I*][%U(:/=X'K6ZTMG=Y4 M\J%1BP):Q.K`2(F^M2L_(Y3;V<7#L]RZ9"C$-K00I./-]XU[_-NY ZBI*;*$ M!$U55:P;)T(U4`8(IV\U$'LR$JF1(8GL>*5S60C\ !%[K9NWZZY>U^<L X#D M30_>_Q5%`[K\2"1QS,XRZ^/X7XU-Q\-;);G=Q+6)DG\:&Z."("""2(GWWKWI M\-/977KTZ!8W8RK2O#W!Z*Z$JDY),^I57[S&`0P$81 8(R*FH-^]CR177O$+ MUD+17<*S1M!E%W(V]9DW&P5C&%!!$$AUK>R]]W>NN.*GOG7_7U??Y)RG*L22 M:%EM;4%G\X0))Y>[XX<.3S[VJ%F_U?1G=P;MLLM^_%O?^JL\/;YVLD+63) T M9].J'0WNZ\7NP66WP0.HU:KO$G;?_9NNO/PG%O8>1%GTD%1Z&.M-;K/DW-G_ MU%COL,9AG#GJ>X;2.(!V^T)FN]^&-.%]G+S8<5VY-7-P4N19 H!65LR^?=N` MN*K?4U==_MSN4\?:VSHT/J'%]+N;#QV:.J/(^:S1;!N`6:1/$,+C>N8CWEA? M+ 3(8,"+B^,K*Q<O+C[WP('I1QYI"'._<7\$;,<BSEAR/FO`GI]/SC__^_K] M>VU)NS'*J 57C4'7<>*C;"&9I"DO+>G5U:N7E]N+B^?-SX\=/&CR;M<8&UU. M,XT#V++EQ=_^]CVY<M,HU6SL3QI:"5![F:2I+"_KA87Q)/F>8\?.6UIJ/_$$ MD[.F)L5WL9Q^L/?OCR<FI.A?.!X_U]=D,\M 8(X=&^_U+EE<?$ZO%QX\.+ZP MMT Z#CRN9ZAF MGC5 /_98L&6+R1, HC68I=NUY'SQRLISCQZ=K*+KR?FLI?%>+XWC7SQ\^-9C MQ[8,!A<O+3UW9:4S-Q<M+!3DG'BHGKU0$/SIF7,UX^.A>\:VEY,KZHRZ&H_T M`%"(+S>ET)4VP0(``-<'```/````9"]W:7IA<F0N<V-R:7!TS51=;]HP%'U' MXC_<\K)$[> [51\*=!/26JJ5J9N$5)GX$KPZ=F0[8ZSJ?]_U!Y_M-FWJPRP" M)/?Z^/B<XYR^\FBWX 4#S;'7ZTM=/%A0N(3:Z*]8.%B*'\QPL(41M=NTW\1J M#X;`ZEJ* CFA52A=-&ZA30_ BV!*"0M73''#OJ&4VB:`5Q[M5KLU;U3A.4`? MU*S$B$'B,`GA\7UE2SB'^TG6N4-9Z(H M9_LM=L7)2EX-%4=.": 7XS.A.BE MWDBJ;`1'6.G&0Q<&F4- S_&[4_4GZ+L%J #TQB`0$%\1I'>X0.0G4$MD%J$ MQ`>8=JY)FVFGV^UV\K-V:R,?XQQFC9!.J*")C96H=/>"\Y&:ZQLJ9%Z5X<C+ MU,E/MGKE9P03;P^GICC=,+<("+'5HJ2'FR0J1BI3EJ"FMD.$ :YJ(=%L"/BE MA;!`0Q%YVHOA>W3O"-4.A=G&D,1WC5&1V&E!*VB))//AY%MJJY,H6=K_7I91 MZ%BM44_ 99R]H`QQUI0A*ASH))7H=HY/> +G:UL]5-_W3D)AAVC`N2;3/?YV M```0````9"]C;VYS;VQE+VUA:6XN9%6-X0K",`R$_P_V#OVI(+Z`3Q.ZV 7: M*AZL0JE_9,+<R4ABZ-B&=4=CB<<,URIXK\!6`M:2PD^VUL^QDC$)FGT<JO+D M92!C<F5A=&5D(&)Y(&9R964 :EII<"YU<FQ;26YT97)N9713:&]R=&-U=%T- M"E523#UH M```(`"F(+S?ZL9(E: $``+4"```.````;&5X97)?9"YS86UP;&6-4<MNPC`0 M/!,I_[!"0B0$-91;2RNU_05Z QQ,LB06B1W9#E!5_'MW8R+:7EK)S]F9W5D[ MG84!S&`MFK9&:`T>)9X UP7V^'LE+=`0L*MU?J!`TZ!R'$MI"8,T2<) ]`KK M-'`^GXF+%AQ+HWZ5?,-?*0[X<=*FB*]JT;G* -4-0F?1_$,):(PV7N\[(4.- M"< KNDZW:LK(7I-I9LJ>0]L3+&E/$AD#E:??,2 .K28.V[#H2,7F1M=2&YF1 M5*YZ=N[D$7M/$!6=D:J$`G==6=(I9I'33M207`7^,88>+C1OACTS93>$MY3+ M````"`!PK1L]:XO:4N<$``!E$```"P```&QE>&5R7V0N>&ULK5C;;N,V$'W> MZY <>30Z,QS.A<K-YU4NR()IPY4<]\*S?N_SKQ_>W_QT__WNK[__>"!W*F&W M0L4O9B+8BNG)7*LYTY8SX^2.WR;DW;N;)\<GDN9LW+OO>28^7"9L->Y=C<#Q MC)0+EE/S8L:]3V=) .$GWJMP /1LUX)MD%A*"V$W>%O$_ XKS?`[P)]7XC]3 ML`;1*!A<](/!8+ C/%4BV7^<6RIX;/:9!=1HP27SPN>PKFW<G<IS)IUQ^[:% M)6=K6CBX#DZ`.%4MH,$; ,C/B8H_MJ"B?:BP?Q54H[ZQ=418JCBB0S)C6?*Q MJ*:Q/;3]X5Y".. H"*-AT._"^HXB1:TZ!!6U7-Z968\)8IZGW)O4 +EX/<Q. MIG<D:3A\0_9T)NE+&2==NBX/%!<W_H,FIK727?H:N0)-SE>'M)6\;;$.3R3" ML%TX^ZW%A9%K!B>0+MM(K6+N"L[ !,Y5&Z<9NL/((845TH'D9(+%%NVZ';N_ MC$:[G<YG;'0)LQI;BLP/JM&EY0M4+!AQ,7E(SW6SHX9!.3K-OM6,OLP5E[8+ M=-"P?= /AM?!5?]?VW[/ID66X=!!CRXBVM<'OU^&OF>T$_=(VYOCW*++`.]2 MY$I!Z_1PI,E]I3:>H6*2*>H=(S.>S03& <-.Y*'WO>/LW4^48_U4D?SUVO:. M2UMMN^!5H)LR"TI]S)+Z<$8^O"_9"RH*&+#Y2:?&NNI.D.O4N#F3A)H<PS`- M=F$5GMTL*EF3J5*"3%U4D>G:LOIF3`TCF"PFK(S$B2JF`BQ7D.)4*`J"5D)B M`6P2*^E$%0JY+"`%0%%C)5XP*1L821!7F,N3)ZA &85B=^')7+,8C(0DBI1* M:R`F8!2314[8:JZT!4$CD_7]E#J!E$LH][-8D]+45&D,6!7/-G2B&4[L3KZ0 MKA)L83*UXR5>V<!3?#T6S_ M"OIC38226<W)::P117P%L%PEQ<ZJ)5L2J>Q,*]!";/WJ5"JL0?-D*SVG\0O- MW*H-_\$F()9:P)6;ZT 1 UD`EI E=Z%CUC*&\1+R20UH63X7SC`[ U_*Q>%9 MAFE-['K.$"">\L03E=:/%CY0"Q^)!7>3]V0AL8=NMI89,+V5]4/5RQE9*+XU M_)W=>E/WCXFKGU4K+^_YQ-RP!S7;%^4-.RJK5.-S\T1E5B#JOE L:5I `YQ0 M^_,$E.I4,^Z=G_<.2SU;6)E7<L^6:B?\Z37"#Q)E^E,7[JU:-4')2=&O')#D M%8)>-^E4?H>"^LRDX:Z9;GJ)VT__9H_KF_/C_P;X!U!+`0(4``H``````"JA M&ST````````````````"````````````$`````````!D+U!+`0(4``H````` M`"JA&ST````````````````*````````````$````"````!D+V-O;G-O;&4O M4$L!`A0`" ``````4( O-SRP?Z0X"```.` ```H```````````` ````2``` M`````"````"H"```9"]W:7IA<F0N<&YG4$L!`A0`%````` `4( O-Z70E3;! M` ``UP<```\```````````` ````R3P``&0O=VEZ87)D+G-C<FEP=%!+`0(4 M`!0````(`+*683PU_AP,> ```-(````0````````````(````+<_``!D+V-O M;G-O;&4O;6%I;BYD4$L!`A0`" ``````B6F).$;]QUXZ````. ```"`````` M``````` ````7T```$%R8VAI=F4 8W)E871E9"!B>2!F<F5E(&I::7`N=7)L M4$L!`A0`%````` `*8 O-_JQDB5J`0``M0(```X```````````` ````UT`` M`&QE>&5R7V0N<V%M<&QE4$L!`A0`%````` `<*T;/6N+VE+G!```91````L` M``````````` ````;4(``&QE>&5R7V0N>&UL4$L%! `````)``D`&`(``'U' $```````` ` end
Aug 27 2010
On 23.08.2010 23:24, Bob Cowdery wrote:Addendum: The plot thickens. If I build a dll with my VC++ Express 2010 then I can convert the import library and it actually works from D. However if I build with MinGW GCC it doesn't even recognise the library even though it is COFF format. My preferred route unfortunately is GCC. I just got 'The D Programming Language' book and that devotes a whole half page to this very important topic. This seems to be rather a minefield and so far there only seems to be one route through it.If you've got a DLL, you can usually generate an import library directly from that using the implib tool, download link below. ftp://ftp.digitalmars.com/bup.zip This obviously fails for DLLs that only export by ordinal, but those are not that common. You need to use the /s switch to get correct name mangling.
Aug 26 2010
On 21/08/2010 22:07, Bob Cowdery wrote:On 20/08/2010 18:44, div0 wrote:Well that's true; D still isn't really ready for production use, unless you have time or money to burn to do a lot of it yourself. I love D, but I only use it for my own small hobby projects. Mr B has stated though that once d2 is wrapped up (which should be just about now) he's going to start concentrating on the tool chain, so these sorts of issues I expect will get much better over the next 6 months. -- My enormous talent is exceeded only by my outrageous laziness. http://www.ssTk.co.ukOn 20/08/2010 09:17, Bob Cowdery wrote:I have compiled all my stuff now with dmc. It has some differences from gcc which caused me some issues. I then went to link up my program with a D front end and realised that I use many 3rd party libraries which will all need to be converted. This doesn't seem like such a great idea any more. Why does a modern language use an old object format I wonder. For me at least I'm wondering if it stacks up. Linux support seems secondary (correct me if I'm wrong). The only painless way to use C libraries is as dll's and even then the import library must be converted for which the tool in not free. The language itself is nice but the hassle factor for mixed language multi-platform seems quite high. I hope I'm wrong on both counts.I'm still concerned it's a bit too soon as a lot of things seem to be either Windows or Linux (cmake says its only tested for *nix) but not both and there is very little guidance on building. I really want to get this working on Windows first. As D makes so much of its binary compatibility with C I find it odd that there is no information on how to build mixed systems just on how to code the calls.C compatibly is fine as long as you either build with dmc or convert the VC c libs to dmc's format. The conversion tool is only available as part of the paid tool set off of digital mars I think; though possibly there's a free one around. Try searching the learn archive it's been discussed before. Personnaly I just compile stuff with dmc and it all works great as long as you get the extern c declarations right.
Aug 21 2010
On 22/08/2010 00:54, div0 wrote:On 21/08/2010 22:07, Bob Cowdery wrote:Thanks, that's an honest opinion. The first project I have in mind is a personal one but it's quite large. My hope would be to move a lot of the C code into D eventually. I don't think I would risk it on a commercial project until the toolchain is sorted and its a bit more mature.On 20/08/2010 18:44, div0 wrote:Well that's true; D still isn't really ready for production use, unless you have time or money to burn to do a lot of it yourself. I love D, but I only use it for my own small hobby projects. Mr B has stated though that once d2 is wrapped up (which should be just about now) he's going to start concentrating on the tool chain, so these sorts of issues I expect will get much better over the next 6 months.On 20/08/2010 09:17, Bob Cowdery wrote:I have compiled all my stuff now with dmc. It has some differences from gcc which caused me some issues. I then went to link up my program with a D front end and realised that I use many 3rd party libraries which will all need to be converted. This doesn't seem like such a great idea any more. Why does a modern language use an old object format I wonder. For me at least I'm wondering if it stacks up. Linux support seems secondary (correct me if I'm wrong). The only painless way to use C libraries is as dll's and even then the import library must be converted for which the tool in not free. The language itself is nice but the hassle factor for mixed language multi-platform seems quite high. I hope I'm wrong on both counts.I'm still concerned it's a bit too soon as a lot of things seem to be either Windows or Linux (cmake says its only tested for *nix) but not both and there is very little guidance on building. I really want to get this working on Windows first. As D makes so much of its binary compatibility with C I find it odd that there is no information on how to build mixed systems just on how to code the calls.C compatibly is fine as long as you either build with dmc or convert the VC c libs to dmc's format. The conversion tool is only available as part of the paid tool set off of digital mars I think; though possibly there's a free one around. Try searching the learn archive it's been discussed before. Personnaly I just compile stuff with dmc and it all works great as long as you get the extern c declarations right.
Aug 22 2010
Bob Cowdery Wrote:Thanks, that's an honest opinion. The first project I have in mind is a personal one but it's quite large. My hope would be to move a lot of the C code into D eventually. I don't think I would risk it on a commercial project until the toolchain is sorted and its a bit more mature.You can try to port it now. You have htod and some level of source compatibility with C.
Aug 23 2010