www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - DMD front end starter kit

reply "Ben Hinkle" <ben.hinkle gmail.com> writes:
I started a few project that needed the dmd front end code so I got the 
source for the DMD front-end into a standalone form and have put it on my 
website as a "starter kit" for others to build D parsers and analyzers. Get 
it at
http://home.comcast.net/~benhinkle/dmdfe
There is a pre-built program that just prints debugging parsing and semantic 
information but that program by itself is not very useful. Hopefully it will 
be easy for people to customize for different tools but if there's something 
I can do to improve the starter kit let me know.

Currently only Windows is supported (but that's probably just becuase I 
haven't made a Makefile for Linux yet). The project is GPL.

Happy Tooling!

-Ben 
Apr 01 2005
next sibling parent reply "Charlie" <charles jwavro.com> writes:
Coolness :) , do you have a script or some automation for this ?

Charlie


"Ben Hinkle" <ben.hinkle gmail.com> wrote in message
news:d2jie3$nl1$1 digitaldaemon.com...
 I started a few project that needed the dmd front end code so I got the
 source for the DMD front-end into a standalone form and have put it on my
 website as a "starter kit" for others to build D parsers and analyzers.
Get
 it at
 http://home.comcast.net/~benhinkle/dmdfe
 There is a pre-built program that just prints debugging parsing and
semantic
 information but that program by itself is not very useful. Hopefully it
will
 be easy for people to customize for different tools but if there's
something
 I can do to improve the starter kit let me know.

 Currently only Windows is supported (but that's probably just becuase I
 haven't made a Makefile for Linux yet). The project is GPL.

 Happy Tooling!

 -Ben
Apr 01 2005
parent reply "Ben Hinkle" <bhinkle mathworks.com> writes:
"Charlie" <charles jwavro.com> wrote in message 
news:d2jsas$12eo$1 digitaldaemon.com...
 Coolness :) , do you have a script or some automation for this ?
no but it's a good idea. I emailed Walter some changes to get the #includes working so that I didn't have to worry about including total.h or something. Other than that I uncommented some printf's to get some debugging output and the rest is right out of the dmd.zip. Hopefully with new versions of dmd it shouldn't be much work to plop it in.
Apr 01 2005
parent reply "Charlie" <charles jwavro.com> writes:
 Hopefully with new versions of dmd it
 shouldn't be much work to plop it in.
Yea it will help alot I think. Thanks for doing this! Charlie "Ben Hinkle" <bhinkle mathworks.com> wrote in message news:d2jue1$146c$1 digitaldaemon.com...
 "Charlie" <charles jwavro.com> wrote in message
 news:d2jsas$12eo$1 digitaldaemon.com...
 Coolness :) , do you have a script or some automation for this ?
no but it's a good idea. I emailed Walter some changes to get the
#includes
 working so that I didn't have to worry about including total.h or
something.
 Other than that I uncommented some printf's to get some debugging output
and
 the rest is right out of the dmd.zip. Hopefully with new versions of dmd
it
 shouldn't be much work to plop it in.
Apr 01 2005
parent reply "Ben Hinkle" <bhinkle mathworks.com> writes:
"Charlie" <charles jwavro.com> wrote in message 
news:d2k1bk$1798$1 digitaldaemon.com...
 Hopefully with new versions of dmd it
 shouldn't be much work to plop it in.
Yea it will help alot I think. Thanks for doing this!
no problem. I'm working on getting a basic dlint going and hooking it up to the emacs mode for error and warning highlighting. That and I want to write a reflection API generator. It's also fun to see just how much of phobos gets sucked in when you import std.string :-)
Apr 01 2005
parent reply "Charlie" <charles jwavro.com> writes:
 I'm working on getting a basic dlint going and hooking it up to
 the emacs mode for error and warning highlighting
Coolness.
 That and I want to write
 a reflection API generator.
Now this sounds fun :). Have you started getting some ideas down on it ? I'd like to hear 'em ( are you going to add meta-data to the executable ? If so where you going to put it so D doesnt require a new exe format ? ) C "Ben Hinkle" <bhinkle mathworks.com> wrote in message news:d2k6r0$1cpr$1 digitaldaemon.com...
 "Charlie" <charles jwavro.com> wrote in message
 news:d2k1bk$1798$1 digitaldaemon.com...
 Hopefully with new versions of dmd it
 shouldn't be much work to plop it in.
Yea it will help alot I think. Thanks for doing this!
no problem. I'm working on getting a basic dlint going and hooking it up
to
 the emacs mode for error and warning highlighting. That and I want to
write
 a reflection API generator.
 It's also fun to see just how much of phobos gets sucked in when you
import
 std.string :-)
Apr 01 2005
next sibling parent reply "Ben Hinkle" <bhinkle mathworks.com> writes:
"Charlie" <charles jwavro.com> wrote in message 
news:d2kbrj$1hu4$1 digitaldaemon.com...
 I'm working on getting a basic dlint going and hooking it up to
 the emacs mode for error and warning highlighting
Coolness.
 That and I want to write
 a reflection API generator.
Now this sounds fun :). Have you started getting some ideas down on it ? I'd like to hear 'em ( are you going to add meta-data to the executable ? If so where you going to put it so D doesnt require a new exe format ? )
I was going to read in class source and write out D code for class(es) that implement a reflection API that resembles Java's reflection API. In other words if the input source code looks like class Foo { int x; void bar() {} } then the output class looks something like class FooClass : Class { this() { fields ~= new Field("x",typeid(int),Access.Public); methods ~= new Method("bar",<signature>, Access.Public); } Object newInstance(){ return new Foo(); } ... } static this() { registerClass("Foo",...); } You have to compile the reflection class and link it in with any class that you want reflected. I haven't thought about how exactly the registration happens or all the signature stuff will work etc etc but I figure something along these lines should work out. The front end should have all the info about members and constructors that one would need.
Apr 01 2005
parent reply "Charlie" <charles jwavro.com> writes:
 I was going to read in class source and write out D code for class(es)
that
 implement a reflection API that resembles Java's reflection API. In other
 words if the input source code looks like
Ahh cool didnt know Java did it like this. Attached is a simple php script to convert the front-end to be compilable by MSVC. It doesnt catch everything ( sys/time.h ) but it should catch most things. Charlie "Ben Hinkle" <bhinkle mathworks.com> wrote in message news:d2kd45$1j2b$1 digitaldaemon.com...
 "Charlie" <charles jwavro.com> wrote in message
 news:d2kbrj$1hu4$1 digitaldaemon.com...
 I'm working on getting a basic dlint going and hooking it up to
 the emacs mode for error and warning highlighting
Coolness.
 That and I want to write
 a reflection API generator.
Now this sounds fun :). Have you started getting some ideas down on it
?
 I'd like to hear 'em ( are you going to add meta-data to the executable
?
 If so where you going to put it so D doesnt require a new exe format ? )
I was going to read in class source and write out D code for class(es)
that
 implement a reflection API that resembles Java's reflection API. In other
 words if the input source code looks like

   class Foo {
     int x;
     void bar() {}
   }

 then the output class looks something like

   class FooClass : Class {
     this() {
       fields ~= new Field("x",typeid(int),Access.Public);
       methods ~= new Method("bar",<signature>, Access.Public);
     }
     Object newInstance(){ return new Foo(); }
     ...
   }
   static this() { registerClass("Foo",...); }

 You have to compile the reflection class and link it in with any class
that
 you want reflected. I haven't thought about how exactly the registration
 happens or all the signature stuff will work etc etc but I figure
something
 along these lines should work out. The front end should have all the info
 about members and constructors that one would need.
begin 666 convert_for_msvc.php M"GT-" T*9G5N8W1I;VX 9FEL95]W<FET92 D9FEL92P )&-O;G1E;G1S("D- M<V5R=%]D969I;F4H)&9I;&4L)&QI;F4 *0T*>PT*"21L:6YE<R ](&9I;&4H M)&9I;&4I.PT*"21N97=,:6YE<R ](&%R<F%Y*"1L:6YE*3L-" DD86QL3&EN M("1I;F-L=61E1FEL97, /2!A<G)A>2 I.PT*"79A<B D<V]U<F-E1FEL97, M"0EI9B H)&AA;F1L92 ](&]P96YD:7(H)'1H:7,M/F-A8VAE9&ER*2D >PT* M*"1F:6QE(#T <F5A9&1I<B D:&%N9&QE*2D (3T](&9A;'-E("D-" D)"7L- M" D)"0EI9B H<W1R<W1R*"1F:6QE+"(N8W!P(BD (3T 9F%L<V4 *0T*"0D) M"7L-" D-" D)"0D)87)R87E?<'5S:" D=&AI<RT^<V]U<F-E1FEL97,L)&9I M;&4I.PT*+R\)"0D)"7!R:6YT(")F:6QE<R Z("1F:6QE7&XB.PT*"0D)"7T- M" D)"0EE;'-E(&EF(" ('-T<G-T<B D9FEL92PB+F B*2 A/2!F86QS92 I M( T*"0D)"7L-" D)"0D)87)R87E?<'5S:" D=&AI<RT^:6YC;'5D949I;&5S M*0T*"7L-" T*"0EI9B H)&AA;F1L92 ](&]P96YD:7(H)'1H:7,M/F-A8VAE M:&EL92 H(" D9FEL92 ](')E861D:7(H)&AA;F1L92DI("$]/2!F86QS92 I M.PT*"0D)"0ER96YA;64H)&9I;&4L)&-P<$9I;&4 *3L-" T*"0D)"7T-" D) M*'5N<VEG;F5D*3]<<RIL;VYG(&QO;F<O(CL-" D))&-O;7!L97A0871T97)N M(#T (B]I;F-L=61E(#QC M+W5G;'D ;F5S=&EN9RP 9&ED;G0 =V%N="!T;R!S<&5N9"!T;V\ ;75C:"!T M:6UE(&]N('1H:7,-" D)9F]R96%C:" H)&%L;$9I;&5S(&%S("1F:6QE("D M("1L:6YE("D-" D)"7L-" D)"0EP<F5G7VUA=&-H*"1P871T97)N+"1L:6YE M+"1M871C:&5S*3L-" D)"0D-" D)"0EI9B H8V]U;G0H)&UA=&-H97,I("D M;BPD<F5P;&%C96UE;G0L)&QI;F4I.PT*"0D)"7T-" D)"0EE;'-E('L-" T* M"0D)"0EP<F5G7VUA=&-H*"1C;VUP;&5X4&%T=&5R;BPD;&EN92PD;6%T8VAE M>PT*"0D)"0D))&YE=TQI;F4 /2 B(VEN8VQU9&4 /&-O;7!L97 ^7&XB.PT* M;F4 /2!P<F5G7W)E<&QA8V4H)'-U9F9I>$Q,+"(D,4PB+"1L:6YE*3L-" T* M9U]M871C:" D;F%N+"1L:6YE+"1M871C:&5S*3L-" D)"0D)"0T*"0D)"0D) M97=,:6YE(#T <')E9U]R97!L86-E*"1N86XL(BTP+C(B+"1L:6YE*3L-" T* M"7!R96=?;6%T8V H)&EN9FEN:71Y+"1L:6YE+"1M871C:&5S*3L-" D)"0D) M" D)"0D)"0D)"21N97=,:6YE(#T <')E9U]R97!L86-E*"1I;F9I;FET>2PB M96QS92 D;F5W3&EN92 ]("1L:6YE.PT*"0D)"0D)"7T-" D)"0D)"7T-" D) M/2 B+W5N<VEG;F5D(&DO(CL-" D))&-O;7!L97A0870 /2 B+VEN8VQU9&4 M/&-O;7!L97 N:#XO(CL-" D)9F]R96%C:" H)'1H:7,M/G-O=7)C949I;&5S M97, /2!F:6QE*"1F:6QE*3L-" D)"0T*"0D)9F]R96%C:" H("1L:6YE<R!A M8V H)'!A='1E<FXL)&QI;F4L)&UA=&-H97,I.PT*"0D)"0T*"0D)"6EF("AC M56YS:6=N960 :2!I;B!F:6QE(" )&9I;&4 *2!L:6YE3G5M8F5R(" )&QI M:6YT(")I;F-L=61E(&-O;7!L97 N:"!I;B!F:6QE(" )&9I;&4 *2!L:6YE M;VYS=&9O;&0N8W!P(BPB(VEN8VQU9&4 /&9L;V%T+F ^7&Y<;B-D969I;F4 M<F=E*"1T:&ES+3YI;F-L=61E1FEL97,L)'1H:7,M/G-O=7)C949I;&5S*3L- M<V5R=%]D969I;F4H)&9I;&4L(B-I;F-L=61E(#QM86QL;V,N:#Y<;B(I.R O M0V]N=F5R=" D8V%C:&5D:7)?*2![( T*"0DD=&AI<RT^8V%C:&5D:7( /2 D M/FEN<V5R=$%L:6%S97,H*3L-"B1C;VYV+3YR97!O<G10<F]B;&5M<R I.PT* M;B!T:&4 <V]U<F-E(&1I<F5C=&]R:65S(&%N9"!R=6X :70-"B\O(&YE960 M(&1O97-N="!L:6ME(')E9&EF;FET:6]N<R!O9B H:2D :6X 9F]R(&)L;V-K M<RP <V\ ;F5E9"!T;R!C;W)R96-T('1H:7,-"B\O(&QO;F< ;&]N9R!I="!D ` end
Apr 01 2005
parent "Ben Hinkle" <ben.hinkle gmail.com> writes:
"Charlie" <charles jwavro.com> wrote in message 
news:d2kj5p$1on1$1 digitaldaemon.com...
 I was going to read in class source and write out D code for class(es)
that
 implement a reflection API that resembles Java's reflection API. In other
 words if the input source code looks like
Ahh cool didnt know Java did it like this.
For more info about the Java API for the curious check out Basically you query the JVM for Class, Field, Method and Constructor objects and can apply them to instances or use them to construct instances. Since D doesn't have a JVM the only thing that knows the class layout is the compiler and so I think the best way to do reflection is to feed more code through the same compiler.
 Attached is a simple php script to convert the front-end to be compilable 
 by
 MSVC.  It doesnt catch everything ( sys/time.h ) but it should catch most
 things.
nifty. I'll stick it in the zip file if you don't object.
Apr 01 2005
prev sibling parent reply "Ben Hinkle" <ben.hinkle gmail.com> writes:
"Charlie" <charles jwavro.com> wrote in message 
news:d2kbrj$1hu4$1 digitaldaemon.com...
 I'm working on getting a basic dlint going and hooking it up to
 the emacs mode for error and warning highlighting
Coolness.
Attached is a sneak-peak at dlint minor-mode in emacs (using the D major-mode). There are two warnings in the code- one about a function that should return a value that doesn't and another about a narrowing cast. I'll clean things up over the weekend and make another post when dlint (and the d-mode update) is ready. Thanks to Walter for the wonderful front-end code and warning implementation. -Ben ps -notice the cute little Dlint menu, too. It basically came for free from the mlint highlighter I'm using (written by my buddy Eric Ludlam - Emacs hacker extraordinaire) :-) begin 666 dlint-mode.PNG MB5!.1PT*& H````-24A$4 ```G ```&N" (```"?K:PV````!&=!34$``+&/ M"_QA!0``/MY)1$%4>%[MG7FT945][SO_N-X*YCUCU(>$Y!D>#FB8'*-$:144 M7"]9LK)<6??5OG5NW;HU[5_M4^?LZ7-6=:]S]ZE=]:M/U:[O_M;99^_?N.^> MZ:C'/OVHWYJDH__S,Y;2+L?\%YV>><SCGGELE9Y5I=]^UG%5^L/C'E^EM8_? MM4J_H])NQZOT!)UV?X]*3U1I#Y5.>))*>^ITXG]]]B1M_^SW;O^<27KR<T_2 M:8?GJ71RE9Y_\N]6:9U*.[Y IU-V_*-3?D^G%Y[R^R]</TDO6O_?7O2^*NWU MOJ=4Z=2G_'&5_D"E%Y^FTDXZO>1TE?Z[2GNKM&%GE5;K=,9357IIE9[VTO<_ M[663]/27GZG3,_91Z0,Z[;*O2AM5>N8K=#KKF:\\ZUDZ[??!/S3I59MVU>G5 MFW9[]=E5>DV5=G_-.55Z[3E[5.G</5Y7I3U5^A.5SGNV2J^OTG->_Z$JK:G2 M<]=\^+G[5^EY*KWA?)V>K]*??D2E%ZAT $H7J/1'!^KTT1?^F4D?>]$;)VFO M S9/TL&;__C "ZMTR(4OKM)%57K312^ITI:7'+IE;YW>?+%*JW4Z[.,OU>G/ M5?K$RU0ZO$HO/_R2E[]EDO9YRZ7[O+5*^ZKT-I4N4^D5;]?I\E>J] Z=KMCO MG9/TJG==.4GOOO+5[[Y*I]?\A4I75^F(JU];I4^^]LA/ODZGHZY1Z4]T.OK: MU^MTC$K7K5'IV"KM?^RGJG1<E=YPW/5O6%NE/U7I^$_K=,![5+I!I0-5.D&E M&U7ZLQ-U^LP;W[N<#CKILSH=?+)*?ZG2(>MT^MPAIWSN39/T5X>N7TKO^_R; M=3KU\X>=^M=5.JU*?W[:354Z_:;#J_2%PS=4Z2TJG?%%E=ZJT_N_I-+;5#I3 MI2^_7:4/Z'3S.S9.TCLWWO+.LR;I71_\BD[OWJ32UBJ=O?4OJG2K2D><H]-M M1YQ[VY$ZG7?;4>?=/DD?NOWH#WVU2A_^ZC%5^MHQYU?I6)4^LDVEXW2ZX Z5 MUJKT497N/%ZEC^ETUWM4VERE$S9__80+)^G$B_Y&I_=N4>D;.IUTL4IWJW3R MQW7ZYLF?^.8ZG2[YVU-,NO1;ZW6Z[%OON^Q_5.GR*IUZ^;>K=,6W3ZO2WYUV M995.5^DJE?[G!I6NKM(95]]3I4]6Z?V?_,[[KZG2F2I=^_<Z?4"EZ^Y5::-* MGU+I/I7.NEZG^S_X:9.^N^F&23K[QN]-TF>^=\YG_J%*G_V'<ZOTCU7ZRW\\ MKTK?/^]SW_^03G_U`Y4^K-/G'SA?I[]6Z8<?4>FF*EUPTX,7?&&2/OJ%AS[Z MQ2I]3*4OJ?0CE39_6:>'+U3I9IU^?-$MD[3E*_\T25O_Z>*M_ZS3QV]5Z2=5 MNNTGGZC23S]Q^T\OT>FK_Z+2I3I][9'+=-JFTL\N5^F.*EUQQ\^K=&>5KKSS M%U?>5:6K5/KZ_]+IZK]1Z7^K]$F5OJ'2_U'IFKMU^K_7?G.2KOO;7W8\:3N+ MH"*H""J"6FDJ HJ (JB-9;M>4/?<\P_6KW_#CW]\^:]_?=NCCW[VIS_][-%' MOUJ9U]_?\7'[[+-+PL7B4'&H.%0<* X5AUK6H69=*J0N#LK-K]6TV5XU KJP M\*V%A;_[MW_[YJ]__8U___<O+BQ\>V'AG__C/[ZNQ/57O_KR+W_YZ7_]U^N^ M_.4S#CC A;ZR(J (*H**H"*H"&IQ015>**277I4T9N4W MI KQI!7;?N /7K M#SK\\)?NL,/C#COLD'7KCGCWNP]?O_[([W[W\_?>>^4CCUSWZ*,W+2Q\7Z6; M;EJ_^^X[VK**H"*H""J"BJ BJ!T1U,3/2FTAG*& &H'<???=3SKQZ'>]ZUUO M6WP=IM3UD$/..&/M7GL]_8M?O/A7O_KZSW]^S<+"G:T*ZK6W++OTGUUTR-)% M2:?=M\*\/WS[?NJZI TK-O[PZ M>=?7/%[/=?_SS3]EQP_WJW8-77_![9U1O M%N[X='5=THO6O^>.ZJ];WZ\O2KKAUN5R[S]17Y'TUFT/+FY\\-H+)Q<E;?SN MXH9?7/+V,YYZUO?L2![ZU,?5I4E<E,1%25R4Q$5)9W-1DOBBI%S':?(W%E2] MHVU8[2W:!VL9KO\.56OD?OOM=_BA;SCQQ!/7KEU[[.)+B>N^K]Y7?73222<= M<-":=>L.>O31K:T)ZJGW*FJWG#JYRO>)!]_VPX6%KYQ6:>KV6E"W7:>N]5V[ MK7K[E=.7!'7;]>8JWR5!7=BZ02*HGUY4T_M/J*[RU<JZJ*E:4!_^Q8,/;UNS M]^D[[[WE$O7^QRL%]:[/<I4O5_F:"WVYRI>K?*L+?1'4N0AJ<!77B*4MC8YL MVPKJZ&L30=UAAQW..77-IDV;-F[<>.:99YY^^NFO?.4K]WK.$Y[T^/^TUUY[ M'?K60W?>9><57Z.^]YYE-_;0+7L_[<C?VO^6!]2FAQZI_J]>WSERW7<F;Q^Z MY67/..9Q!RQF6'H]<-DY^F<SO[/^[Y>W_FCK/KL=?_37K&Q7G/?$/:Y1WE2I M.;L^5GWTJM>^:L_G[;DLJ&MN_L'"P \NV5C]#O6D2ED?N/2LB: NW'/DTX_: M^])'*N6[_4KU:]0C;Z_>WK+._AWJV1][2&U[9/.!Q_VV5E.EH]6/4,_=_+6M M1U]>J>8#EY^[_#M494]_=.N^!]WZPX6?77CP"4\\6+U14GK=5Q9-ZL2A& G> M]JGJIZ KEGQ_ON7-Z[1#W;KA^JUJU==9\K5D7KU52[XGW%EMNO7,I=^A?F!Q M9?C.&XV KOG =Q?NNO&]E:QN<05U4MHO+GU']5-4EGQ9\F7)ER5?'*K\=ZAM M":K15$>5&PKJQ1=?O'GQI315B:OM1Q_[V$I637K))?^R4H.4=EZQY%!OV7M) M4!^X[(..H+[LLD6AG;PJ03WZJXMRNW[YQ [[+ JJ?CUPQ7G5C1VTH.K_]S2" M^N&+?F0)ZN*2[Y-/U\N_GYH(JK?DNW7#NN.W+6R]H^8[U'I!?<F%ER W_/ = M:]2J+PX5AXI#Q:'B4'&HMDQ^?O%UXXTW7G_]]=OOL'WB%ZA:4"<.=>E.2;6" MJM7T <O.5K=).JK2T;" 5G=*>I^U"/RU:R:"6CG4>X]=%E3E4*M+D^SO4)_\ M.-3"WZ'NLLLNMRV]'GGDD9J[$DZ^0+WG".O6 [6"NBBB6E!32[[J.]3)K0?? MN+7ZSE4)ZM)WJ,=:WZU69?WHME>LO"AIOZLJ=_O#JSZ2<* [/E^M^M8(ZE/V M2E^4M U!W8M;#W+K06X]R*T'9W#K05M0_0MW_6\W37[G2EV3L_:BI/)7^:K? MR1A!W;IUQ=6\87%=_!K5O):_0U47*$66?!_WS*N6?O?RR ,/31RJ?U&2_ YU M\E)KO.HNOGK5U[K*=\6]?'-^-J.6?-6]?(]?_'E,\Y_-J$M\$PYU*79^-L.] M?-6UOESERU6^7.6;=2_?:00U]LN9>?\.U1;4,S>>N>>>>Z97?97*SOO&#M62 MKWE5U_?J^^-S<WQNCL_-\;DY?G6+?&Z./XB;XS=>\JV]\U'B9S.)?9M<E+1F MS9H;;KA!>5/E4]>M6[?K[KO6/HMFWH+*TV9XV Q/F^%I,SQM9NA/FU&"JC1, MX]MX?!N/;^/Q;7-Z?)O2R)F^]#V/<JO(NU.2D<_'/.8QOZE> J>EXE"YER_W M\N5>OMS+EWOYEKV7;^-GJ\UA1ZE#E2BHDP=!15 15 050450$=3JL>,D"$ ` M`A" ``2R".CO8JN[Z<LOH,JJ ,P0 `$( "!,1! 4+'C$( `!" ` 0($$-0" M$,=PYD4;(0`!"$ 30!!15 A``$(0 `"!0A,(: WK=UCM[5?FL453+,K>1;1 M%BQS\_[Z_E ';K[[/OM]P2J:%56V1\J6)FQ1*Y4*8R,;!" P" ("054ST8K; M(.Z_1<]-T\Q0;IF[GG23=7; E)]?T9=.W-6$O,>)GXF:=%-R?A492Q\K&UN) M97CHG'_ *L/!?E_ O&FIQL^<M)M[2\L4'Q-G8S[!MM>.GZSJG,RQ?;/*',2Q M`$5!``*C)B 3U-22KU("RU?)-<8NL]JK4I3)<J OV,)BER1PY3>[BQ%6T^N2 MWE=?3Z[0B26%6XZA4 ZM?"8JM==$WB;MW7+ 4L/3)VCVB8*.(>A9 QLK+"OQ MVB%91E8:3$!0O59;?;',H7';5_3=4E^8$R:?<+ 3XT?I"KR+HVHRG#QNDR9X MPX#S M&39M7V$E95+JJY=SKF"+1TQE V<SRPU9,I$2[+&56+N-?JN7MV ;W;3M5>TA M29Y&4/5TF2,M*^+WU#UXWI XF0B?,4RA<[6G$8[$-F_[DE(Z)V0S$M3$6:!S M7I5U+D)F"$ ``A$"4PNJO50KIQQ6A<E:W.2J(EM4<EQ1^*(DNT:]>#OYIM!> M^PTM^3K3_4UK#YQ<-JR^ZI-]9^Q7;2W5+D<;7?)=6 D/G7ED!S/=DF]V=>[) MA'514MJLRWO<&4O60L**"ZK]ZLPPD(];<D(``A"($YA>4/4EJ>:"&MDO4]T5 MN45E6OKEY1[Z$B%KHMRR>%F0[**DE=<-V=_++J^=+B]:3DI.7I0T^49VQ9)O M3CPK&CNIVES=,VFLO?;KO[?Q>A*E/Y3#F5Q%W.2BI.4KIZ35K6C[TOE'K4.] MY^Z,' \+JC<L3:6A83#F12K M=)(` CI0Y>CD:"MU&MB\' 25 0$!",R,P& $=68$FT_NA 0!"$ `` ,B *#B M4"$``0A ``(%"""H!2!B4B$``0A ``((*H(*`0A ``(0*$ (*C_+_):X 4! M"$ ``A 8$(&8WF6Y[=6K5^O\".J A 9- 0`$( "!' ()0146HT44017B(AL$ M( `!" R30%I0)3X501WFR*!5$( `!""010!!S<)%9 A ``(0 $"8`(+*R( ` M!" ``0 4((" %H!($1" ``0 `($L055/UO"_5>4[5$81!" ``0A 8$$NJ.8Y M58ZF(J ,(PA ``(0 (!44)>?^KCXSM94!)5A! $(0 `"$! )JJ.F^D^CJ0 J M$OU &1" ``0 T',""&K/.Y#P M[1&(":K2R*P73YMIKP^I&0(0 `$.D" =LE7Q:C$4O(_ST/M0'\2` 0 ``$( MYQBCX=]\UG8JS:YU^K953OG^EMD%0,D0 `$(* )C-2AEI)PB5A*\L2&HT0: M)7D8[A" ``0 ,&L"+3M4)6PZF7::/\U&^XU^[^QBMB2*LC\RE?KEQ'!KHVF2 MSA;<Z'RDL]7VHG.[9)T_N-'Y2&<SY9M=G!KMHH(?U49(! A ``(02!/HA$-U M_**MJ49!=3,<730;[48&Y=FAD.50'46T_PR*I9.A5E =B^D(I-]_OH+Z&FEO M291O9)OC! (0 `$IB30LD--*V+0I)H&^Y_ZI<6$,TM05;&^/=5UU0IJ+(\O M 4%S&5S.30NDUDBYH$XY - =`A" ``0T 8XZ5$<: ]HY3T&UATN60Q4*:DS_ M$%0.5 A ``)](8!#K9:1T[TE7/(UV=)+OOYUN<(E7Y.-)=^^'%W$"0$(C(I MRP[5OS[(ODPI>(&2?QV3ZC"['--_Z8N/ N4$^SYQ\9$VH/YO8^R-SJ=!0:V] M:, 775..76#L.J98^<%?W8SJ`*"Q$( `!$H1Z(1#E3>FUDW*BR*G(L!/;A & M"$8* 0`$( "!L1/ H8Y]!-!^"$ ``A H0J 3#G7 ORZ=]?-0 X. 7Y<6.38H M! (0 $ 6 9$ZU%(27OLD&=49DCRQ/D,:LT8SF2$``0BT2*!EA^K?JR%XNT$- MR'^LFP&7N/6 V=&^F7XP?Z(;.O4\5.>F [7/0PW>I% WUG[$C7,;0NY*V.)A M2=40 $ ?"73"H?(\5'OHU#X/U0BAW-<Z]_LU:FI*B-UAN(]CFI A``$(M$* M`0CTE$!'':JCE#P/U1E>"&I/CS?"A `$!DP`A]J_YZ'.PJ&RY#O YRF00`" M\R'0LD/E>:A:';.>AYK('_S(O_+(&%SG(S/FN")I/H<?M4 ``D,BT F'* >: M^]VGO&1R2BZ& A($( `!",0(M.Q0LSJ&YZ%FX9)D3CACR>[D 0`$( `!0Z!G M#I6> P`$( `!"'230)\<:C<)$A4$( `!"$! $<"A, P ``$(0 `"!0C 4 M MI (0 `"$( `#I4Q``$(0 `"$"A `(=:`")%0 `"$( `!'"HC $(0 `"$(! M`0(XU (0*0("$( `!"" 0V4,0 `"$( `! H0P*$6 $ 1$( `!" ` 82 WG?/ MW<*T>O5JG7/#A WJ_2KU3I'5FQ(6&/H0 `$( "!P1!(.U1),[6((J 25N2! M`0A ``(0*$ `02T`D2( ``$(0 `"""IC``(0 `$(%" `():`")%0 `"$( ` M!%H4U%4+"P72IH5-O4X,00A ``(0& 8!!+5E/1[&,*(5$( `!"" H"*H' 40 M `$(%" `(**H!881A0!`0A ``*=$-2=SMVI\?>IL2]0;SYK.Y6*?[VZ:M4J MJA)(G6Q--5N<CTQF>WNMH&JKZHBKV6AO-]F"NZB* GXTUZ0BJ!QU$( `! 9) M0 `0 `$(%"$0(\%53O7]'>HM4N^SAKOK!TJ EIDU%((!" ` 0X2:%E0 ]<9 MV5<J^5<M.5MJ?S:3OBA)?Z6J==2^4BFHK#C4#HY M $"0`(+*P( `!" ``0 4((" %H!($1" ``0 ``$$E3$``0A ``(0*$" EX*Z M!-6Z[^ RWJ5GO2V8-_HS[[Z&-3UB;CVH\MGO8[L9N]G =_J"BG/MQ0%#D!" M``1B!'HFJ$8IG?;84FJ[TER'JG34E&R_+SN O8402T+F=( ``$(S)G < 35 MPN7?V0EJ^J(DEGSG/_JI$0(0 $!!`CT3U.!U1O:52OY52\'KF-($9V=/[55B M.P;4M."8IB (0 `"K1#HF MS*XS*!D"$( `!/I+`$'M;]\1.00 ``$(=( ` MJASB 4"$ ``A#H+P$$M;]] M``0 `('^$FA94/G]97^'#I M%$(``A" P `((* #Z$2:``$(0 `"[1- 4-OO`R* ``0 `($!$&A94%GO'< 8 MH D0 `$(* (M"RH] $$( `!"$! & 00U&'T(ZV ``0 `(&6"2"H+7<`U4,` M!%HF *"VW %4#P$(0 `"PR" H ZC'VD%!" ``0BT3 !!;;D#J!X"$( `!(9! M`$$=1C_2" A ``(0:)D` MIR!U ]!" ``0 , P"".HQ^I!40 `$(- R`02U MY0Z > A ``(0& :!A*!N$+]6KUY]WSUWJZ3V4.]7J7>*CMX4JV 8^& %!" ` M`0A 0!.(Z9W2Q:P7 LJ( `$( "!41-(&$CC,[7;3/^/H(YZ&-%X"$ ``A"H M_0Y5HJ9F?9<E7T84!" ``0B,E `.=:0=3[,A``$(0* L`1QJ69Z4! $(0 `" M(R6 0QUIQ]-L"$ ``A H2P"'6I8GI4$``A" P$ )X%!'VO$T&P(0 `$RA+ M?IEZ_2UV2+GY:YLSBPP2C+.HES(A``$(R D,T*'.3E#E6&TQD^Q5,.:8]I3: M+FE.\3P(:G&D% !"!0GT)I#U;;,"$GL3T=IG&P&A[T]+4[*96JC:>RF[3OU M'"> K'B*'R<4" $(0*"60)L.U1=+'6YLNRV?=L."8I-HN:VIMK ZHNAK9'!+ M:(8C-C&]K%4:7X]]W+X$VEMB)E65DY98_].$H#I1Q9IO.]0$HH0.F8]*"6UP M\B76M$#Z1YK0 M2WML3/;E1<$+E/QO6+4&^TO!?E&.XB8N2DH';SZU+SORKT4*?I,Z?X>J^-B7 M'1F-3%]A9&?3'93(KS^=?KA3` 0 `('9$6C?H<ZN;5TH>?XRT(J 3H-: DB2 M( `!FP`.E?$``0A ``(0*$ `AUH`(D5 ``(0 `$<*B,`0A ``(0 $ !`CC4 M!" ` ;X3:-^AHJ9]'T/$#P M$( `!-HGT+)#Q9ZV M-E "!" ``0A H'4"G7"HK5, ``A ``(0 ,"4!'"H4P)D=PA ``(0 $!%`(?* M``(0P*$R!B ``0A ``(%".!0"T"D" A ``(0 `.E3$``0A ``(0*$ `AUH` M `$( "!` 1PJ 4 4 0$( `!"$ `A\H8 `$( `!"!0 $,M`)$B( `!"$ ` M`CA4Q `$( `!"$" ``$<: &(% $!"$ ``A 8A4/=Z=R=NMS3-Y^UG4I=CK!! MXB02"$! 1 0&[E"50.IDXS-;G(],9G^7('UMPK0&V.\;=)5=2(/=]2ZV*908 MHW"HON^T)=/^-->AVHYJ&G?E:$#CD6%BF"88QUPV+LK11;\<R98TBABW8+_X M`MRX:<&HT X506T\JMD1`GTA,'"'JKLA**BFAZ875&/%&O=Z*6%V?&J[\3AR M)9'/7(6+<8L)JN--T]65=:B-^X(=(0"!OA 8KT-%4&O-GV-5<\=TWP4UM[U\ MAYI+C/P0&! !'.H*_YKK5FUOZNA'UA)?PJ$V*\?W7EGE&"F=IIPIEWPE;K76 MH0;7A$LMC#MS`4N^`YL<:0X$< D,W*$&KS.RKU3RKUH*7L>4P!I;[ZV]AL64 MJ2=]4XZC0[GEF%5-7^!S!T=0TH3Q)%IDUJ7MA =IU'KH1"W^1[/^#E5%&_O9 M'6IM^V>4H=0$VE8Y0>^H'=B,B%$L!" ` ;X3P*'VO0>)'P(0 `$.D$`A]J) M $/M6H\0#P0 ``$(])(`#K67W4 MM ,W*$Z=QDTE+6 QAZ5&GQ.JLE?*\:QFPC&;C&8^$&(_9%DB,3R.U6;HF+; M W65??I*J9M 2;"0!P(0 , <" S9H3IWNH_]:;;[SR&W!;A61QV5LO_,>A_, M*N_FF+ YHFAG"XJ9?T^#VAB MIAVJO%\3 FHT-9U'UY4K>!*':K<BMWPY`9V3[U!SB9$?`A#H-8$1.=2$*]5= MF%XBEG>SLWP:U#F)B\T5/,?R!I=\;9V6B+J\U7Y.EGRGH<>^$(! [P ,V:%J MC4P_\=3YU']4JE-([=JO45/[>A]G6*07>!T3F75=DG.1D:VIP7BR"F\PN'D^ ME7 ``$(0""+``XU"Q>9(0`!"$ ``F$".-2>C0S_MS2S^ EISZ 0+ 0 `($. M$,"A=J 3" $"$( `!/I/`(?:_SZD!1" ``0 T $".-0.= (A0 `"$(! _PG M4/O?A[0``A" ``0Z0& 4#K7V; Q3=D2IWY66*F?*YB1V=V[G:W+RW-/9,:=D M"$" +P1PJ"MZ:M;2FSLLNB:QP1LR<,_>W&XE/P0 ,$ "`W>H_GT'52^:QYT& MPJ'ZOM.6TMA-\^7#I92/],N)W?77CBUV3WQY_/*<P:5=;H(O!TA."$! P 0& MF0IJ3#A9\AW&7$ K( "!*0D,W*':ST,U2[O^0T_]1XL++_>-+;WZ"Z&UDAQ[ MU/;[ ``$(0& `!'"H`^A$F `!"$ ``NT3P*&VWP=$``$(0 `"`R" 0QU M[OV/<O,+(TQD,S=\$!;5^O-3$[2=)LAS"MM.- A 8* $1N10A3<_\GNZ=L?: MZ&S4?_K/=TL\)S7V>+A<\QJ\EZ_CD.R'GNI0_<>W)1Z>*M&&:9Y",S=!%7*( M9PPY IK^,S'^8FH7F]!]4?$E-K9E%H>!1$T=1^O_*0_,;KY&9/]ORC'T?.7S MJGZR':?=;1*'&LNOM]<JKG"4=$10A=':V>1J.FQ!M9EDG<0T8,XN$(! UPB, MQ:'ZWXF:GHBYTE)+OO(NGX^ %I_HTQ<E!9_IEA!C^=*HO]8Z_9*OY#M4%;Q= M-4N^\A%.3 ,F\"0':KVCD9*'4V-763DY/?_=-QJXOJFQ'5,SJBREPK3%[G8 M*XK^=ZBQ<K0&S& ITEDB=IH6%,C$SV:$9E?.P7&--K3 MZHVI5J>!JQ-V.<L M/TL8]G1#ZR M``0*$\"A% 9*<1" ``0 ,$X".-1Q]CNMA `$( "!P 1PJ(6!4AP$( `!"(R3 MOPWAC.*D6 A ``+=)S!PA^K<>M#QEUKP_*>\.>;2OV>A+L?L'C.COJ &[U.8 M&"6)6]\%]W)NR)<>?^G"AWK3HNX?DT0(`0CTE,"0':JOE+80FO?3/(4F]J0: M/9'&[K: 'W4RV Y5OB L45.AZ#KC3%AR6Z.3>B$``0CTB,!8'&I"^:9QJ+F" MI\QT^<'KFX*[!(==XKJAX(-9[/Q. ;$'N02?D\H7J*.:!6 L!"!0A,"0'6H1 M1 A ``(0&"$!'.H(.YTF0P`"$(! >0(XU/),*1$"$( `!$9(`(<ZPDZGR1" M``0 4)X`#K4 MA 1PJ"/L=)H,`0A ``+E">!0RS.E1 A ``(0&"$!'.H(.YTF0P`"$(! >0(X MU/),*1$"$( `!$9(`(<ZPDZGR1" ``0 4)X`#K4 M/IH/`45 `',K31 A`1QJ7P5UU>)KGI/OW&K,:I>.*FN74M 2E<X_G 0')QAY M[!LD7+S VGX,UIBKG;,.6]Z_`YA;:<(("0S9H=I'K^1(-GDDF1T!<&9V_:=? MCA^27XY\4O-SVDVPU<*.QYZ: _$X')S\IEVU4WQ63K\62?FY>R7X!#L]F+]6 MC<WX>F8T4U*N,$AVC,43K->.)^%]$V$GIM0&<W36!!VDX9? A%$[-A+YTS6F M=YS1.$E C F89%37=H0S<FKSQT:74\X`YE::,$("0W:HYM U9_KIH]TY_9?( MTL+O=V[M^81D-.:2E AGHA=J=Q_A7$R3!T! % Y5**BU![F3H;CCJ9T9Y0$D MOYF9Q6STYQHGO[&D]BZ^N?2#CU41W.X':0H,QN-$9<_^?AN%`B9DFT"74 MY M"[5U)9QH[;ZSR-"U>&;1QE;*S)6WX+)$T/ZFG;JD7MNF^_6V LNO= !S*TT8 M(0$<:O/O4#LR]1 &!(9'8(1S,4T>``$<*H(*`0ATCL `YE::,$("+3K4$=*F MR1" ``0 ,% "+3K4P3*E81" ``0 ,$(".-01=CI-A `$( "!\ 1PJ.694B($ MCVI!%5I5Y[YHM6)L\ILJ[%V$E8YSV-%J"$ ``L,C,'R':D2N5B ;]*ZCH'8) M"&H#GNP"`0A H+\$1N%0=??4"FJN0[4=L*3\_HX2(H<`!" ` 5H"PW>H!D&M MH-;"\C.8)64$M0$]=H$`!" P) (XU*EZ,R&H+/E.19:=(0`!"/2-P) =:OJB M"$ ``A#H/ $<:O?[B A``$(0* '!'"H/> D0H0`!" ` >X3P*%VOX^($ (0 M:O?[B A``$(0* '!!(.];Y[[A:FU:M7ZYP;-FQ0[U>I=ZKI>E-"L7N AQ A M``$(0 `", +I)5])&5I$$50)*_) ``(0 ,! "=1^AUIK4A'4O Z.6\\_OZ^A M$S<$( "![A% 4 -]LFK5JB(]I<K1+[LT?XND+J<0I85:#LT;\UYO"8JEL[V! MH-;N$JO::6-N.<'V2KA)\B1ZI-1(D(1!' A H.\$$%11#S:86!.[3%]:3&!L MO]?3J.-.$IZR]B,S/$S.X"[^]&UBB%DE?UHW:A1432-")B1)?CNS;W_],AVM M=ZN=_ [5GO*<]UD.,IC9V9C^TQY5?FGV5![\U!F4$H$4"E+MXK"?(;%T+%SR M_)DURNT>E_C(A !+=L^*C<P0 ,!0"0 %U=94Y[K?40MJEBHGY#SMJ.1S>NV* MSC5>4I[2H:9'6VR!U]DK(:CFZ]68G14*:JER[-5:YY3%7YG0"P!IPL*E^V Y MBV0<V%?T!//',OAKMO851OXR;^Q;5:.169IJAVI'*/PZ-O$=I]/OAK8#QUZQ M]U?O ^6CII(!21X(C(W \ 5U&#TJ7_5MT%ZA_C4H>=:[Y I; _S!)LRT.V8- MC?(A`($9$4!09P2V<+',X$6$+1=C;O["O4YQ$(! KP J+WJ+H*%``0 `(&N M$D (JOIR5/CBYOA=[5[B `$( "!>1&(":K2R*Q7]&DS/^$%`0A ``(0 ("8 M0$I0O\H+`A" ``0 ``$! >.//QY!%7 B"P0 ``$(0"!)H+R JJLK80X!"$ ` M`A 8&P$$-=KCYD8!Z3%AW^TA:_0(R\\JLZ>9[9.P9CSU7L'F3W^&-WT)*K!$ M=Z='0JEQDN#C?%2DO3T=BH0- 6D(E!=4/7=,$U-W]DU,TTZ0\ISVCLWVZ Z? MU?8T07_C;_1W">J<(W )\Y0EC29SUEX]&E59H?IS=UIC8H4'R_$)Q^ [0V)& MPI8F,U.GF. \TWJS! .9(=!K`C,1U/F?X?JS9%"K[(VU[YWS^EA^8SZ$)_5. MJ,*]>CW(LE0D:) DS8^1C FM[QH3?5&DF]*%)$X(9E2[*398/F=[DE%'' C8 M!.H%U3ESMP_"Q$E]>G;PQ<DNJD$/I04U&&>MH.J97=Y>X:R7%N8&;>_[+L&A M$^H\*<EYSC-G0O"RX$AD*;W,FQ#RK$ DDF8*%%8Z?0!9 JHS3U_I/ <2=4& MHR?&W(J.S]T=#V_ M!DL +: 2AXJ #G9PT MG& 2Q.83ME_+]/5J0;5OP**W*&^J</7,H4Z/(Z'6148;A1 "L^NL,4#N%+W9 M!5/D%+E!>+GJ:%?1H+K9'133!-/L. K6F*N=LPX[%L_T]?J"JLJ<GZ#Z M-Z9M]AO]7G &9'(&ST3\BF+Y[=,-(7&[7<[!EFZRT]C:/_W" ZV(-2$QL(1Q MIH\ZNUY[ULA%FBA'%VL/";MG&_"Q6U3+S1F*L^9I&NM 3_.)=:5_-.7VRS3Q M!#G;79D()CT/^&,R-F/4CMX&HB*9(B3'16P<QK %6SW_<9)H?O"C6'X)1A]% MP4E<SQ22,.S&!O,+R[';&*LW."$*RZ]EDBC'IY$X$M+QQ)H0Q!B<6&/EYVX7 M`A<.CV9 '+"U[4T<4+7]6ZJ],2")09*>!V+HY"T*#BKA9%U;BV0\)PY8O_Q8 MC?(#L. X230_^)$P^%KXP2:D]\J*I_9\19=F'*IC57U!U0&KUSP$U1G0L<FQ M/<74\G$*=_*;3YV^"VZ7C+=8/(F9J':<Q_A(I Q)>[,FIC1/?_PD!H9DMI5S MT\>F/+\\I_R ,"-$?OS6'C 22F7K3<PG"6B2T9A+LE9HTQ-+[:PEWUVW+KCD M):>/B8&:AIS;60V4-4O :[L[(:C.=ZB.FNH_C:;V7E!K!28Q"6;-=\(![6>K M/:+2DV#M[G+ERQ(`>;'I R%Q:.5.REF'4"S^MGA*%%$?G/+Q8.>O[:]81]0" M"<83[+M$_+%V269>IUCAY"LI65A43%<D[:W%VZ!?9CI.8DRF.?IJ.3?HXJQX M& OJ7*_RU13,2TN706._,:<S= ;[0'7*\?,[!V16.4Y PM[U^S =9+"6X$#Q MN=G[^D=+L%[A+CYD.0U)ITBFK41[[8X.CH?:01+C$*PT`6T./$UCG1$8.VIJ M^]T^68RU-TA8?GR9_HT=YOY1[\A/;#P+QZ%D ,5X!H^^X.$OSQF;Y1RD00A. M6VJ[K)5Q$M2>Q%",\:R=9GU$PET2W+)&B]^HEJ_R%;;?GA-S=R'_" ED'15] MY%.P 06+*D*R:_$4:51;A12$*2Q*F"T]I><64 KO]/5VXL8.0ASV&:YP%[*- MD, 8QLF41W[,+K0U6KH63UL<BM<[_W$B/_H2.:<,NS'&Z>OMDZ VQL2.$( ` M!" ` 5D32 BJNMI(^.+F^+/N)LJ'``0 `(&N$X )JM+(K!>/;^MZ3Q,?!" ` MZ>:LWS_]#X87&T:Q]CKH)*,PZ%UB<2;JK0U5Q^9WC;\QV"]ER_>KJ!U"LQ / M_E /\I%4G1AOP8\*\DP,(7^<2\8D>2 P/ (20?6%3VV1WAS?[.P\*,Z>4^18 M8Y..,U\[$Y;^T^1Q"I%,9$X)M7_:4TRP7N$<%(RM5/R.WL08UO9.4"P=90T* M;1"C7UVS\OT!%N-6BF=N^;GUIO,W&\;! >KW2]EQ6#NBR "!GA*0"*K23D=3 M,Q[?YJOQ+)9\$X(:G%B=J(2=)Y_1 O'D3J"^)M4*>;HA_K0HX58+)S&5QSAG MB7?!\NUXG+.NX$=9/!/]&RL\JU+Y\&L<MJ2_[,*;'4>U(XH,$. I`:& VIJ: M_8!QYZB;A: :[4E/:D)+%.M+^8R&H-8Z5/]$1X ]MF/NR8')+_=V3H3R\>"( M4+"EM6$TJR[M^.UNDAP[B8;4QM_3*9*P(2 G(!=4K:F.FJH_1<]#M36UE* & MCW_)I-#XR)?/:+6"JH'4]E-M.3$7*YRR)2)4&V<,BU.XI"Y)V$$A='C:>6+" M.3=!E?"1]*-\^,D=JLTMM[\2^6L'-AD ,$ "68+JJZE(4&TU5>^-H#K;:R=N MXR]C:N278%?AG%S'/HK-Z<'\Z8UZEG3F+//G-.W-"MX.(Q&,KTDQSD'3X[34 M[RR[X<'WB0.LMA]-&VW_J G[=?GM<H9B[:$>RU\[2'P1"G*+!2 I7S*N[$K3 M 8$(:JT]ZDBOYSK+CH1-&!" ``0 4$M (():VTXR0 `"$( `!&9* .>ASA0O MA4,``A" P% (S/QYJ,$+F= (`0A ``(0 $"" /X)3?7;&G5"`BD(0 `"$( ` ,`````$E%3D2N0F"" ` end
Apr 01 2005
next sibling parent "Charlie" <charles jwavro.com> writes:
Umm ... amazing!  I didn't even know they had a lint mode, how cool!


nifty. I'll stick it in the zip file if you don't object.
No not at all "Ben Hinkle" <ben.hinkle gmail.com> wrote in message news:d2kuks$22a8$1 digitaldaemon.com...
 "Charlie" <charles jwavro.com> wrote in message
 news:d2kbrj$1hu4$1 digitaldaemon.com...
 I'm working on getting a basic dlint going and hooking it up to
 the emacs mode for error and warning highlighting
Coolness.
Attached is a sneak-peak at dlint minor-mode in emacs (using the D major-mode). There are two warnings in the code- one about a function that should return a value that doesn't and another about a narrowing cast. I'll clean things up over the weekend and make another post when dlint
(and
 the d-mode update) is ready. Thanks to Walter for the wonderful front-end
 code and warning implementation.

 -Ben

 ps -notice the cute little Dlint menu, too. It basically came for free
from
 the mlint highlighter I'm using (written by my buddy Eric Ludlam - Emacs
 hacker extraordinaire) :-)
Apr 02 2005
prev sibling parent reply "Charlie" <charles jwavro.com> writes:
Do you mind if I use this for elephant ?

C

"Ben Hinkle" <ben.hinkle gmail.com> wrote in message
news:d2kuks$22a8$1 digitaldaemon.com...
 "Charlie" <charles jwavro.com> wrote in message
 news:d2kbrj$1hu4$1 digitaldaemon.com...
 I'm working on getting a basic dlint going and hooking it up to
 the emacs mode for error and warning highlighting
Coolness.
Attached is a sneak-peak at dlint minor-mode in emacs (using the D major-mode). There are two warnings in the code- one about a function that should return a value that doesn't and another about a narrowing cast. I'll clean things up over the weekend and make another post when dlint
(and
 the d-mode update) is ready. Thanks to Walter for the wonderful front-end
 code and warning implementation.

 -Ben

 ps -notice the cute little Dlint menu, too. It basically came for free
from
 the mlint highlighter I'm using (written by my buddy Eric Ludlam - Emacs
 hacker extraordinaire) :-)
Apr 03 2005
parent "Ben Hinkle" <ben.hinkle gmail.com> writes:
"Charlie" <charles jwavro.com> wrote in message 
news:d2pn5u$8i9$1 digitaldaemon.com...
 Do you mind if I use this for elephant ?

 C
Please do. That's what it's there for. I'll post a real announcement now that I put it up.
Apr 03 2005
prev sibling parent reply "Lynn Allan" <l_d_allan adelphia.net> writes:
 Currently only Windows is supported (but that's probably just
becuase I
 haven't made a Makefile for Linux yet). The project is GPL.
Just curious why you are using gpl ... was that necessary based on derivation, or your preference? If preference, why?
Apr 01 2005
parent reply "Ben Hinkle" <bhinkle mathworks.com> writes:
"Lynn Allan" <l_d_allan adelphia.net> wrote in message 
news:d2k3fj$19b0$1 digitaldaemon.com...
 Currently only Windows is supported (but that's probably just
becuase I
 haven't made a Makefile for Linux yet). The project is GPL.
Just curious why you are using gpl ... was that necessary based on derivation, or your preference? If preference, why?
The dmd source allows either GPL or the artistic license and I just chose GPL because I understand it. I haven't looked closely at the artistic one - would you prefer that license? I'm not really sure how it differs from GPL, to be honest. Maybe I should keep the same style as dmd and say "either GPL or Artistic". That would probably be the best approach.
Apr 01 2005
next sibling parent "Walter" <newshound digitalmars.com> writes:
"Ben Hinkle" <bhinkle mathworks.com> wrote in message
news:d2k6ff$1cca$1 digitaldaemon.com...
 "Lynn Allan" <l_d_allan adelphia.net> wrote in message
 news:d2k3fj$19b0$1 digitaldaemon.com...
 Currently only Windows is supported (but that's probably just
becuase I
 haven't made a Makefile for Linux yet). The project is GPL.
Just curious why you are using gpl ... was that necessary based on derivation, or your preference? If preference, why?
The dmd source allows either GPL or the artistic license and I just chose GPL because I understand it. I haven't looked closely at the artistic
one -
 would you prefer that license? I'm not really sure how it differs from
GPL,
 to be honest. Maybe I should keep the same style as dmd and say "either
GPL
 or Artistic". That would probably be the best approach.
The artistic license applies if you want to make a close source version.
Apr 02 2005
prev sibling parent reply "Lynn Allan" <l_d_allan adelphia.net> writes:
"Ben Hinkle" <bhinkle mathworks.com> wrote in message
news:d2k6ff$1cca$1 digitaldaemon.com...
 "Lynn Allan" <l_d_allan adelphia.net> wrote in message
 news:d2k3fj$19b0$1 digitaldaemon.com...
 Currently only Windows is supported (but that's probably just
becuase I
 haven't made a Makefile for Linux yet). The project is GPL.
Just curious why you are using gpl ... was that necessary based on derivation, or your preference? If preference, why?
The dmd source allows either GPL or the artistic license and I just
chose
 GPL because I understand it. I haven't looked closely at the
artistic one -
 would you prefer that license? I'm not really sure how it differs
from GPL,
 to be honest. Maybe I should keep the same style as dmd and say
"either GPL
 or Artistic". That would probably be the best approach.
<alert comment="IANAL"> And I'm also not a fan of gpl. From a developer's point of view, I've only seen downsides to using gpl compared to other common open source licenses (mpl, Artistic, LGPL, etc.), and no upside. Whenever I see a project with gpl, I just groan. "Crud, another library / tool that will be harder to work with than it has to be." I would come close to recommending public domain over gpl, but Artistic seems like quite a good choice. I remember trying to sort out the different license choices some time back, and Artistic was the choice I was going to use. A possible problem with Artistic is that I recall some time back, SourceForge didn't have "Artistic" as one of the options in the drop-down menu for which license you wanted to select. Or maybe it was some variant of "Modified Artistic"? It may very well have been added since then, so this is moot. </alert>
Apr 04 2005
parent "Ben Hinkle" <ben.hinkle gmail.com> writes:
 Whenever I see a project with gpl, I just groan. "Crud, another
 library / tool that will be harder to work with than it has to be." I
 would come close to recommending public domain over gpl, but Artistic
 seems like quite a good choice. I remember trying to sort out the
 different license choices some time back, and Artistic was the choice
 I was going to use.
It's funny you say that because I totally agree. Most of my stuff is public domain.
Apr 04 2005